2010-01-16 2 views
14

Ho specificato <mvc:annotation-driven /> in dispatcher-servlet. Non sto usando @InitBinder.
e sto usando l'annotazione @valid per la convalida del metodo di controllo comeNon vengono visualizzati messaggi di errore se convalidati utilizzando @valid (JSR-303) in Spring MVC

@RequestMapping(method = RequestMethod.POST, value = "new") 
    public String save(@Valid Article article,ModelMap model) { 
//code here 
} 

e validazione funziona bene, ma invece di mostrare errore .. campione mostrato nel codice html

<tr> 
     <td>Title</td> 
     <td><form:input path="title"/></td> 
     <td><form:errors path="title"/></td> 
</tr> 

Getta eccezione come ..

org.springframework.web.util.NestedServletException: Elaborazione richiesta fallito; annidata eccezione è org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errori errore campo in oggetto 'articolo' sul campo 'urlInfo.url': valore respinto []; codes [typeMismatch.article.urlInfo.url, typeMismatch.urlInfo.url, typeMismatch.url, typeMismatch.java.net.URL, typeMismatch]; argomenti [org.springframework.context.support.DefaultMessageSourceResolvable: codici [article.urlInfo.url, urlInfo.url]; argomenti []; messaggio predefinito [urlInfo.url]]; messaggio predefinito [Impossibile convertire il valore della proprietà di tipo 'java.lang.String' su richiesto digitare 'java.net.URL' per la proprietà 'urlInfo.url'; l'eccezione annidata è org.springframework.core.convert.ConversionFailedException: Impossibile convertire il valore dal tipo 'java.lang.String' per digitare 'java.net.URL'; l'eccezione annidata è org.springframework.core.convert.ConversionFailedException: Impossibile convertire il valore dal tipo 'java.lang.String' per digitare 'java.net.URL'; l'eccezione annidata è java.lang.reflect.InvocationTargetException] Errore di campo nell'oggetto 'articolo' sul campo 'titolo': valore rifiutato []; codici [Size.article.title, Size.title, Size.java.lang.String, Size]; argomenti [org.springframework.context.support.DefaultMessageSourceResolvable: codici [article.title, title]; argomenti []; messaggio predefinito [title], {javax.validation.constraints.Size.message}, 6, [Ljava.lang.Class; @ 1db3aac, 2147483647, [Ljava.lang.Class; @ 1e90abf]; messaggio predefinito [dimensione deve essere compresa tra 6 e 2147483647]

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659) 
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 
org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213) 
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171) 
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) 

come configurarlo, non un'eccezione e invece tornare a messaggi di errore di pagina e mostrare ...

+0

Come è stata abilitata la convalida?Usando '@ InitBinder' sul tuo controller, o' 'nel tuo contesto? Qualunque cosa tu stia usando, per favore aggiungi quei bit alla tua domanda. – skaffman

risposta

16

Si dovrebbe esplicitamente decidere cosa fare con gli errori di convalida:

@RequestMapping(method = RequestMethod.POST, value = "new") 
public String save(@Valid Article article, BindingResult result, ModelMap model) { 
    if (result.hasErrors()) 
     return "formView"; 
17

Nel vostro metodo di gestore di controllo, assicurarsi che l'argomento BindingResult è subito dopo il comm e argomento.

+1

Questo è stato per correggere la risposta per me. –

+0

Molto strano ma questo ha funzionato anche per me. Mi è sempre stato detto che Spring è in grado di capire da solo i parametri del controller e che non dovrei mai preoccuparmi di loro! Ma questa è almeno l'istanza in cui l'ordine dei parametri influisce sull'esecuzione! – Jaywalker