2010-01-16 68 views
14

我在调度程序servlet中指定了<mvc:annotation-driven />。 我没有使用@InitBinder。
,我使用了验证@Valid标注在控制器的方法类似在Spring MVC中使用@valid(JSR-303)进行验证时不显示错误消息

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

和验证工作正常,但不是显示错误。在HTML代码所示 样品

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

它抛出异常像..

org.springframework.web.util.NestedServletException: 请求处理失败;嵌套0​​例外是 org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult:在场地对象 '项目' 2错误字段错误 'urlInfo.url': 拒绝值[];代码 [typeMismatch.article.urlInfo.url,typeMismatch.urlInfo.url,typeMismatch.url,typeMismatch.java.net.URL,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: codes [article.urlInfo.url,urlInfo.url]; arguments [];默认邮件 [urlInfo.url]];默认消息 [未能将属性值 类型'java.lang.String'转换为所需的 类型'java.net.URL'属性 'urlInfo.url';嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法将类型为 'java.lang.String'的值转换为类型 'java.net.URL';嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法将类型为 'java.lang.String'的值转换为类型 'java.net.URL';嵌套的异常是 java.lang.reflect.InvocationTargetException] 字段'title'的对象'article'中的字段错误:rejected value [];代码 [Size.article.title,Size.title,Size.java.lang.String,Size]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: codes [article.title,title];论据 [];默认消息 [title],{javax.validation.constraints.Size.message},6,[Ljava.lang.Class; @ 1db3aac,2147483647,[Ljava.lang.Class; @ 1e90abf]; 默认消息[大小必须 6之间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) 

如何配置它,不是抛出一个异常,而是返回到页面,并显示错误信息......

+0

您是如何启用验证的?在你的控制器上使用'@ InitBinder',或者在你的上下文中使用''?无论您使用哪一个,请将这些位添加到您的问题中。 – skaffman 2010-01-16 11:51:20

回答

16

你应该明确地决定如何处理验证错误做:

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

在你的控制器处理程序方法,确保了BindingResult参数紧接在后COMM和论据。

+1

这是为我纠正答案。 – 2013-02-22 16:29:28

+0

非常奇怪,但这也适用于我。我一直被告知Spring可以自己计算出控制器方法参数,我永远不需要担心它们!但至少有一个参数的顺序会影响执行的实例! – Jaywalker 2016-11-22 09:52:22

相关问题