2016-12-06 2 views
0

J'essaie de passer des paramètres de JSP au contrôleur Spring MVC. Cependant, le contrôleur n'est pas appelé. J'ai lu de nombreux articles sur ce sujet et j'ai essayé différentes solutions, mais cela ne fonctionne pas pour moi.Spring MVC: les appels de JSP ne vont pas au contrôleur

Mon web.xml ressemble à ceci:

<display-name>MyList</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

<servlet> 
    <servlet-name>mylist</servlet-name> 
    <servlet-class> 
     org.springframework.web.servlet.DispatcherServlet 
    </servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>mylist</servlet-name> 
    <url-pattern>/welcome.jsp</url-pattern> 
    <url-pattern>/welcome.html</url-pattern> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

Mon contrôleur:

@RequestMapping(path = "/subcategory/{id}", method = RequestMethod.GET) 
public String findSubcategory(@PathVariable int id,Model model) { 
    List<Category> subCategoryList = this.myListDao.getSubCategories(id); 
    model.addAttribute("subcategories", subCategoryList); 
    return "searchCategory" ; 
} 

Le code correspondant de mon JSP est comme suit

<spring:url value="/subcategory/1" var="formUrl"/> 
<c:forEach var="category" varStatus="status" items="${categories}">  
    <li><a href="${fn:escapeXml(formUrl)}">${category.description}</a></li> 
    </c:forEach> 

Il fonctionne quand je l'url comme /subcategory.html et ont @RequestMapping("/subcategory") dans mon contrôleur. Lorsque j'utilise /subcategory/1 et que vous modifiez le mappage de requête correspondant, cela ne fonctionne pas. J'ai essayé divers modèles d'URL tels que <url-pattern>/mylist/*</url-pattern><url-pattern>/MyList/*</url-pattern> etc. mais rien ne fonctionne. J'apprécierais vraiment toute aide pour résoudre ceci. Merci beaucoup d'avance.

Répondre

0

Votre mappage de servlet en cours est PRÉPONDÉRANTS le mappage de servlet par défaut ou racine,

<servlet-mapping> 
    <servlet-name>mylist</servlet-name> 
    <url-pattern>/welcome.jsp</url-pattern> 
    <url-pattern>/welcome.html</url-pattern> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 

Votre mapping suivant permet à toute demande avec * .html pour être accepté d'où votre invocation à /subcategory.html travaillé sans aucun problème.

<url-pattern>*.html</url-pattern> 

Au contraire, il doit être changé,

<servlet-mapping> 
    <servlet-name>mylist</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Quelques points à retenir,

  1. <url-pattern>/*</url-pattern>

    Ce modèle est généralement recommandé avec Filter pour continuer avec Enchaînement filtre . Si vous utilisez ce modèle, vous devrez prendre soin de toutes les responsabilités telles que le service des ressources statiques, etc.

+0

Merci beaucoup ... cela a fonctionné. Au début, j'étais sceptique quant à l'utilisation de/pour le modèle d'URL, mais c'est la seule solution qui semble fonctionner. – Love2LearnNShare

+0

Cela fonctionnait bien ... mais quand j'ai effacé les données en cache du navigateur .. il ne montre pas le CSS ... sur la console je reçois une erreur 'code' Aucun mappage trouvé pour la requête HTTP avec URI [/ MyList/resources/... dans DispatcherServlet.J'ai essayé d'utiliser et 'code' mais cela ne m'amène pas au contrôleur ... Cela fonctionne bien avec le mappage d'URL * .html. Toute idée de pourquoi cela arrive? – Love2LearnNShare

+0

@ Love2LearnNShare cela semble être un autre problème lié à votre configuration de ressources statiques. Je suggère de soulever une autre question à ce sujet. C'est plus à voir avec l'endroit où vous avez placé vos ressources statiques. Mentionnez aussi votre structure de répertoire pour la même – ScanQR

0
@RequestMapping(path = "/subcategory/{id}", method = RequestMethod.GET) 

au lieu de chemin, vous devez utiliser la valeur, comme ceci:

@RequestMapping(value = "/subcategory/{id}", method = RequestMethod.GET) 
0

Votre appel ne peut pas atteindre le contrôleur parce que votre carte de demande «/sous-catégorie/{id} » ne correspond à aucun URL- modèles définis avec votre servlet Dispatcher. Vous pouvez essayer de remplacer ces lignes:

<url-pattern>/welcome.jsp</url-pattern> 
<url-pattern>/welcome.html</url-pattern> 
<url-pattern>*.html</url-pattern> 

avec

<url-pattern>/*</url-pattern>