Spring MVC 3 validation avec des annotations - ne pas montrer la forme:des erreurs
J'ai été coincé avec ce environ une heure, ce n'est pas la première fois que je fais cela, mais je ne peux pas le comprendre.
Il doit me montrer les erreurs de forme, au lieu de cela, il jette cette exception.
LE: j'ai réussi à résoudre l'exception dans le temps, mais je ne peux pas le voir les erreurs. ils ne sont pas rendus
org.springframework.web.util.NestedServletException: traitement de la Requête a échoué; nested exception est org.springframework.la validation.BindException: org.springframework.la validation.BeanPropertyBindingResult: 1 erreurs
Champ d'erreur dans l'objet "catégorie" sur le champ "name": rejeté valeur de [jk]; codes [Gamme.de la catégorie.nom,Gamme.nom,Gamme.java.lang.Chaîne,la Gamme]; les arguments [org.springframework.contexte.de soutien.DefaultMessageSourceResolvable: codes [catégorie.nom,nom]; les arguments []; message par défaut [nom],25,3]; de message par défaut [gfhghj]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestfilter.doFilter(SecurityContextHolderAwareRequestfilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingfilter.doFilter(AbstractAuthenticationProcessingfilter.java:182)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.de sécurité.web.l'authentification.fermeture de la session.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.de sécurité.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
org.springframework.web.le filtre.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.le filtre.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
org.springframework.web.le filtre.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.le filtre.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
@Controller
@RequestMapping("/category")
public class CategoryController {
@Autowired
StockGateway stockGateway;
@RequestMapping(value = "add", method = RequestMethod.POST)
public String addCategory(@Valid @ModelAttribute("category") CategoryAdd category, ModelMap model,
BindingResult binding) {
if (binding.hasErrors()) {
return "category.add";
}
CategoryDTO dto = Converter.toCategory(category);
try {
stockGateway.createCategory(dto);
} catch (StockGatewayException e) {
e.printStackTrace();
}
return "redirect:/category/add";
}
@RequestMapping(value = "add", method = RequestMethod.GET)
public String initView(ModelMap model) {
model.put("category", new CategoryAdd());
return "category.add";
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<div xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:spring="http://www.springframework.org/tags"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:security = "http://www.springframework.org/security/tags"
xmlns:util="urn:jsptagdir:/WEB-INF/tags/util"
xmlns:form="http://www.springframework.org/tags/form"
version="2.0">
<security:authorize access="hasRole('ROLE_STOCK')" var="isStock">
<form:form modelAttribute="category" method="POST" action="add" >
<table>
<tr>
<td>Name :</td> <td> <form:input path="name" /></td>
</tr>
<tr>
<td></td> <td> <form:errors path="name" cssClass="error" /></td>
</tr>
</table>
<form:button>Add</form:button>
</form:form>
</security:authorize>
public class CategoryAdd {
@Range(min= 3 , max = 25, message="gfhghj")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
- Êtes-vous absolument certain
binding.hasErrors()
est de retour vrai? - Oui. Je suis en utilisant des Tuiles. Que cela pourrait-il avoir quelque chose à faire avec elle?
- Oui, eh bien, si
binding.hasErrors()
est faux, vous serez redirigé vers un GET au lieu de retourner à partir d'un POSTE, toute demande de données serait perdu à ce point. Ne parler pas d'erreurs d'y être 🙂 - Avez-vous essayé de mettre le @Plage de la lecture?
Vous devez vous connecter pour publier un commentaire.
Il semble y avoir une dépendance sur l'ordre dans lequel les paramètres doivent être répertoriés dans le mappé méthode de contrôleur.
Par exemple:
De travail, considérant ce qui suit:
Ne sera pas. Je n'ai pas complète comprendre pourquoi il en est, d'autant qu'il se compile sans problèmes.
Model
aprèsBindingResult
dans les paramètres de la listeDonc la solution complète est:
Avis j'ai changé le paramètre ModelMap avec la Carte, et si le résultat a des erreurs, j'ai remis le modèle du résultat.
Maintenant le WTF:
Le BindingResult a un champ objectName, qui a pour valeur le nom de la classe.
Vous devez définir le modelAttribute/commandName pour que. À être le même que objectName dans BindingResult, ou bien il l'habitude de rendre les erreurs.
Donc pour le match:
Personne ne sait comment pouvons-nous changer l'objectName de la BindingResult? Par défaut, il prendra le nom de la classe.
map.put("categoryAdd", (CategoryAdd)result.getTarget());
vous pourriez utiliser directement le paramètre de catégorie:map.put("category", category);
-- d'ailleurs, le modèle de nom de l'attribut doit être "catégorie" non "de la catégorie.ajouter"new CategoryAdd()