14

私は <mvc:annotation-driven />dispatcher-servletで指定しています。@InitBinder を使用していません。
そして、次のようなコントローラーのメソッドでの検証に @valid アノテーションを使用しています

@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: リクエストの処理に失敗しました。ネストされた例外は org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 エラー フィールド 'urlInfo.url' のオブジェクト 'article' のフィールド エラー: 拒否された値 []; コード [typeMismatch.article.urlInfo.url,typeMismatch.urlInfo.url,typeMismatch.url,typeMismatch.java.net.URL,typeMismatch]; 引数 [org.springframework.context.support.DefaultMessageSourceResolvable: コード [article.urlInfo.url,urlInfo.url]; 引数 []; デフォルトメッセージ [urlInfo.url]]; デフォルト メッセージ [タイプ 'java.lang.String' のプロパティ値をプロパティ 'urlInfo.url' の必要なタイプ 'java.net.URL' に変換できませんでした。ネストされた例外は org.springframework.core.convert です。ConversionFailedException: タイプ「java.lang.String」からタイプ「java.net.URL」に値を変換できません。ネストされた例外は org.springframework.core.convert.ConversionFailedException: Unable to convert value from type 'java.lang.String' to type 'java.net.URL'; です。ネストされた例外は java.lang.reflect.InvocationTargetException です] フィールド 'title' のオブジェクト 'article' のフィールド エラー: 拒否された値 []; コード [Size.article.title,Size.title,Size.java.lang.String,Size]; 引数 [org.springframework.context.support.DefaultMessageSourceResolvable: コード [article.title,title]; 引数 []; デフォルトメッセージ [タイトル],{javax.validation.constraints.Size.message},6,[Ljava.lang.Class;@1db3aac,2147483647,[Ljava.lang.Class;@1e90abf];

 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)

例外をスローせず、代わりにページに戻ってエラーメッセージを表示するように構成する方法...

4

2 に答える 2

18

コントローラー ハンドラー メソッドで、BindingResult 引数がコマンド引数の直後にあることを確認します。

于 2012-05-02T12:53:10.507 に答える
16

検証エラーをどう処理するかを明示的に決定する必要があります。

@RequestMapping(method = RequestMethod.POST, value = "new") 
public String save(@Valid Article article, BindingResult result, ModelMap model) { 
    if (result.hasErrors())
        return "formView";
于 2010-01-16T15:24:18.593 に答える