Page de démarrage en Thymeleaf, Spring et Class Controller
bonjour;
je travailler avec projet maven en utilisant thymeleaf et class controller mais toujour j'avais probléme en lancement de page index.html
et voila la page:
<html>
<head>
<title>Acheter En Ligne</title>
</head>
<body>
<br/>
<br/>
<br/>
<br/>
<br/>
<center>
<h1>
<a href="ListeProduits.htm">Acheter Des Produits A Travers Ce Lien</a>
</h1>
</center>
</body>
</html>
------------------------------le fichier web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID">
<display-name>Archetype Created Web Application</display-name>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/WEB-INF/pages/index.html</welcome-file></welcome-file-list>
</web-app>
----------------------------------------------------lefichier mvc-dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schem...ng-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schem...-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.programme.test.util"/>
<context:component-scan base-package="com.programme.test.service"/>
<context:component-scan base-package="com.programme.test.dao"/>
<context:component-scan base-package="com.programme.test.controller"/>
<mvc:annotation-driven />
<mvc:view-controller path="/login" />
<!-- **************************************************************** -->
<!-- THYMELEAF-SPECIFIC ARTIFACTS -->
<!-- TemplateResolver <- TemplateEngine <- ViewResolver -->
<!-- **************************************************************** -->
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
<!-- Template cache is true by default. Set to false if you want -->
<!-- templates to be automatically updated when modified. -->
<property name="cacheable" value="true" />
</bean>
<bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
</bean>
</beans>
---------------------------------------------------la classe de control
package com.programme.test.controller;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.programme.test.domain.Client;
import com.programme.test.domain.Commande;
import com.programme.test.domain.CommandeLigne;
import com.programme.test.domain.Ensemble;
import com.programme.test.domain.Produit;
import com.programme.test.service.ClientManager;
import com.programme.test.service.CommandeLigneManager;
import com.programme.test.service.CommandeManager;
import com.programme.test.service.ProduitManager;
@Controller
public class {
@Autowired
ProduitManager manager;
@Autowired
ClientManager managerClient;
@Autowired
CommandeManager managerCommande;
@Autowired
CommandeLigneManager managerCommandeLigne;
private List<Produit> listeProduits1;
private List<Produit> panier;
@ModelAttribute("totalP")
public double getTotal() {
int tot = 0;
if (panier==null)
{
tot=0;
}
else
{
for (int i = 0; i < panier.size (); i++)
{
tot=(int) (tot+((panier.get(i).getQuantite())*(panier.get(i).getPrix())));
}
}
return tot;
}
@ModelAttribute("clientA")
public Client getClientA() {
return new Client();
}
@ModelAttribute("nombreP")
public int getNombrePanier() {
if (panier==null)
{
return 0;
}
else
{
return panier.size();
}
}
@ModelAttribute("produitC")
public Ensemble getProduitObject() {
return new Ensemble();
}
@ModelAttribute("quantiteM")
public Produit getQuantiteModifier() {
return new Produit();
}
@ModelAttribute("ProduitsL")
public List<Produit> populateTypes() {
listeProduits1=manager.listeDeProduits();
return listeProduits1;
}
@ModelAttribute("ProduitsAC")
public List<Produit> populateTypes1() {
return panier;
}
@RequestMapping({"/ListeProduits"})
public String showSeedstarters() {
return "ListeProduits";
}
@RequestMapping({"/ListeProduitsAcheter"})
public String showSeedstarters1() {
return "ListeProduitsAcheter";
}
@RequestMapping(value="/AjouterPanierAuCommande", params={"AjouterCommande"})
public String saveCommande(
final Client client1, final BindingResult bindingResult, final ModelMap model) {
String message="";
if((panier.size ()>0) && (panier!=null))
{
final Client c1= managerClient.clientChercher(client1.getIdClient(), client1.getPassword());
if (c1!=null)
{
int idCommande=managerCommande.rechercheMaxIdCommande();
int tot=0;
for (int i = 0; i < panier.size (); i++)
{
tot=(int) (tot+((panier.get(i).getQuantite())*(panier.get(i).getPrix())));
}
Commande commande=new Commande();
commande.setIdCommande(idCommande+1);
commande.setDescription(null);
commande.setPrixTotal(tot);
commande.setIdClient(client1.getIdClient());
managerCommande.createNewCommande(commande);
for (int i = 0; i < panier.size (); i++)
{
CommandeLigne commandeLigne=new CommandeLigne();
commandeLigne.setIdClient(client1.getIdClient());
commandeLigne.setIdCommande(idCommande+1);
commandeLigne.setIdProduit(panier.get(i).getIdProduit());
commandeLigne.setQte(panier.get(i).getQuantite());
commandeLigne.setPrixUnitaire(panier.get(i).getPrix());
commandeLigne.setPrixTotal((panier.get(i).getQuantite())*(panier.get(i).getPrix()));
managerCommandeLigne.creatNewCommandeLigne(commandeLigne);
}
message="CommandeAjouter";
panier=new ArrayList<Produit>();
}
else
{
message="Verifier IdClient et Password";
}
}
else
{
message="Panier vide";
}
// model.clear();
return "redirect:/ListeProduitsAcheter?q1="+message;
}
@RequestMapping(value="/AjouterProduitAuPanier" ,params={"AjoutePP"})
public String ajouterProduitEnPanier(final Ensemble produit1,final BindingResult bindingResult,
final HttpServletRequest req) {
final Integer rowId = Integer.valueOf(req.getParameter("AjoutePP"));
String message="";
if((produit1.getListeP().get(rowId.intValue()).getQuantite())>0)
{
message=" ";
Produit p=new Produit();
p.setIdProduit(listeProduits1.get(rowId.intValue()).getIdProduit());
p.setDesciption(listeProduits1.get(rowId.intValue()).getDesciption());
p.setPrix(listeProduits1.get(rowId.intValue()).getPrix());
p.setQuantite(produit1.getListeP().get(rowId.intValue()).getQuantite());
if (panier==null)
{
panier=new ArrayList<Produit>();
panier.add(p);
}
else
{
int id1=-1;
for (int i = 0; i < panier.size (); i++)
{
if((panier.get(i).getIdProduit())==(listeProduits1.get(rowId.intValue()).getIdProduit()))
{
id1=i;
}
}
if(id1>=0)
{
int qt= (panier.get(id1).getQuantite())+(produit1.getListeP().get(rowId.intValue()).getQuantite());
panier.get(id1).setQuantite(qt);
}
else
{
panier.add(p);
}
}
}
else
{
message="La Quantite doit etre superieur de 0";
}
//produit1.getRows().remove(rowId.intValue());
return "redirect:/ListeProduits?q="+message;
}
@RequestMapping(value="/SupprimerProduitDePanier" ,params={"SupprimerPA"})
public String supprimerProduitDePanier(final Ensemble produit1,final BindingResult bindingResult,
final HttpServletRequest req) {
final Integer rowId = Integer.valueOf(req.getParameter("SupprimerPA"));
if(panier!=null)
{
panier.remove(rowId.intValue());
}
return "redirect:/ListeProduitsAcheter";
}
@RequestMapping(value="/ModifierProduitDePanier" ,params={"ModifierPA"})
public String modifierProduitDePanier(final Produit produit1,final BindingResult bindingResult,
final HttpServletRequest req) {
final Integer rowId = Integer.valueOf(req.getParameter("ModifierPA"));
String message="";
if((produit1.getQuantite())>0)
{
message=" ";
if(panier!=null)
{
panier.get(rowId.intValue()).setQuantite(produit1.getQuantite());
}
}
else
{
message="La Quantite doit etre superieur de 0";
}
return "redirect:/ListeProduitsAcheter?q="+message;
}
@RequestMapping(value="/AjouterProduitAuPanier1", params={"AjoutePP"})
public String removeRow1(
final Produit produit1, final BindingResult bindingResult,
final HttpServletRequest req) {
final Integer rowId = Integer.valueOf(req.getParameter("AjoutePP"));
System.out.println(rowId.intValue());
System.out.println(produit1.getDesciption());
//produit1.getRows().remove(rowId.intValue());
return "ListeProduits";
}
/** @RequestMapping(value="/tr", params={"save"})
public String saveSeedstarter(
final Greeting seedStarter, final BindingResult bindingResult, final ModelMap model) {
if (bindingResult.hasErrors()) {
return "seedstartermng";
}
//this.seedStarterService.add(seedStarter);
model.clear();
return "redirect:/seedstartermng";
}
@RequestMapping(value="/greeting", method=RequestMethod.GET)
public String greetingForm(Model model) {
model.addAttribute("greeting", new Greeting());
return "my";
}
@RequestMapping(value="/greeting", method=RequestMethod.POST)
public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) {
model.addAttribute("greeting", greeting);
return "my";
}
@RequestMapping({"/my"})
public ModelAndView showMessage(final Produit produitC) {
produitC.setIdProduit(0);
System.out.println("ez1");
System.out.println("from controller");
return new ModelAndView("my", "messages", manager.listeDeProduits());
} */
}
-----------------------------------------le classe ProduitController relier par 2 page
fichier ListeProduits.html
------------------------
<html >
<head>
<title>Acheter En Ligne</title>
</head>
<body>
<h3 align="left">
<a href="index.html">Retour</a>
</h3>
<form action="#" th:action="@{/AjouterProduitAuPanier}" th:object="${produitC}" method="post">
<table align="center" border="2" >
<CAPTION><u><b><font size="15">liste Des Produits</font></b></u></CAPTION>
<thead>
<tr>
<th>N</th>
<th>ID</th>
<th>Description</th>
<th>Prix</th>
<th>Qauntite</th>
<th>Choisir</th>
</tr>
</thead>
<tbody >
<tr th:each="prd,rowPrd : ${ProduitsL}" >
<td align="center" th:text="${rowPrd.count}"></td>
<td align="center" th:text="${prd.idProduit}" th:value="${prd.idProduit}" ></td>
<td align="center" th:text="${prd.Desciption}" ></td>
<td align="center" th:text="${prd.prix}+' DT'" style="width:100px;"><h1>DT</h1> </td>
<td align="center"><input type="text" th:field="*{listeP[__${rowPrd.index}__].quantite}" style="width:50px;text-align:center" /></td>
<td>
<button type="submit" name="AjoutePP" th:value="${rowPrd.index}" style="font-weight:bold;" >Ajouter Au Panier</button>
</td>
</tr>
</tbody>
</table>
<center>
<h3 ><p th:text="${param.q[0]}" th:unless="${param.q == null}" style="color:red;">Test</p></h3>
<h2>Liste Des Produits Acheter</h2>
<h4>
<a href="ListeProduitsAcheter.htm" th:if="${nombreP} > 0"> <h3 th:text="'Panier '+${nombreP}" ></h3> </a>
</h4>
</center>
</form>
</body>
</html>
-------------------------------
fichier ListeProduitsAcheter.html
-------------------
<html >
<head>
<title>Home</title>
</head>
<body>
<h3 align="left">
<a href="ListeProduits.htm">Retour</a>
</h3>
<table align="center" border="2" >
<CAPTION><u><b><font size="13">liste Des Produits Acheter</font></b></u></CAPTION>
<thead>
<tr>
<th>N</th>
<th>ID</th>
<th>Description</th>
<th>Qauntite</th>
<th>Prix Unitaire</th>
<th>Prix Total</th>
<th>Supprimer</th>
<th>Modifier</th>
</tr>
</thead>
<tbody >
<tr th:each="prd,rowPrd : ${ProduitsAC}" >
<td align="center" th:text="${rowPrd.count}"></td>
<td align="center" th:text="${prd.idProduit}" th:value="${prd.idProduit}" ></td>
<td align="center" th:text="${prd.Desciption}" ></td>
<td align="center" th:text="${prd.quantite}" ></td>
<td align="center" th:text="${prd.prix} +' DT'" style="width:100px;"><h1>DT</h1> </td>
<td align="center" th:text="${prd.quantite} * ${prd.prix} + ' DT'" ></td>
<td>
<form action="#" th:action="@{/SupprimerProduitDePanier}" method="post">
<button type="submit" name="SupprimerPA" th:value="${rowPrd.index}" >Supprimer</button>
</form>
</td>
<td>
<form action="#" th:action="@{/ModifierProduitDePanier}" th:object="${quantiteM}" method="post">
<input type="text" th:field="*{quantite}" style="width:50px;text-align:center" />
<button type="submit" name="ModifierPA" th:value="${rowPrd.index}" >Modifier Qauntitér</button>
</form>
</td>
</tr>
<tr>
<td align="right" colspan="5" >TOTAL :
</td>
<td align="center" th:text="${totalP} +' DT' ">
</td>
</tr>
</tbody>
</table>
<center>
<p th:text="${param.q[0]}" th:unless="${param.q == null}" style="color:red;font-weight:bold; font-size:15;">Test</p>
</center>
<br/>
<br/>
<br/>
<form action="#" th:action="@{/AjouterPanierAuCommande}" th:object="${clientA}" method="post">
<table align="center" border="2" >
<CAPTION><u><b><font size="5">Information Client</font></b></u></CAPTION>
<thead>
</thead>
<tbody>
<tr>
<td>ID Client</td>
<td align="center"><input style="width:100px;text-align:center" type="text" th:field="*{idClient}" /></td>
</tr>
<tr>
<td>Password</td>
<td align="center"><input style="width:100px;text-align:center" type="password" th:field="*{password}" /></td>
</tr>
<tr>
<td align="center" colspan="2" >
<button type="submit" name="AjouterCommande" style="font-weight:bold; font-size:15;" >Ajouter Commande</button>
</td>
</tr>
</tbody>
</table>
<center>
<p th:text="${param.q1[0]}" th:unless="${param.q1 == null}" style="color:red;font-weight:bold; font-size:15;">Test</p>
</center>
</form>
</body>
</html>
-------------------------------------------------------------
il ya t'il quelqu'un à une idée pour demerre la page index.html
sans modifir <url-pattern> en web.xml parceque l'instruction (<url-pattern>/</url-pattern>) neçessaire pour demarrée les methode @RequestMapping
et merci.
Ridha.