2013-09-29 112 views
1

我在分析spring-mvc-showcase示例項目(spring-mvc-showcase github)。當我點擊不正確的日期格式(截圖上的出生日期字段)時,與在JSP頁面上呈現驗證響應的方式相混淆。如何使用一些自定義消息使用戶更友好,但沒有ConversionFailedException細節?註釋表單驗證 - 轉換失敗的自定義消息

截圖:

enter image description here

註解驅動驗證應用。下面是代表birthDate字段的bean類中的代碼段。

FormBean.java

@DateTimeFormat(iso=ISO.DATE) 
@Past 
private Date birthDate; 

方法負責提交表單:

FormController.java

@RequestMapping(method=RequestMethod.POST) 
public String processSubmit(@Valid FormBean formBean, BindingResult result, 
          @ModelAttribute("ajaxRequest") boolean ajaxRequest, 
          Model model, RedirectAttributes redirectAttrs) { 
    if (result.hasErrors()) { 
     return null; 
    } 
    // Typically you would save to a db and clear the "form" attribute from the session 
    // via SessionStatus.setCompleted(). For the demo we leave it in the session. 
    String message = "Form submitted successfully. Bound " + formBean; 
    // Success response handling 
    if (ajaxRequest) { 
     // prepare model for rendering success message in this request 
     model.addAttribute("message", message); 
     return null; 
    } else { 
     // store a success message for rendering on the next request after redirect 
     // redirect back to the form to render the success message along with newly bound values 
     redirectAttrs.addFlashAttribute("message", message); 
     return "redirect:/form";    
    } 
} 
+0

請顯示您的看法。 –

+0

這是公共github的例子,我粘貼鏈接在我的帖子的開頭。這裏是確切的看法form.jsp: [鏈接](https://github.com/spring-projects/spring-mvc-showcase/blob/master/src/main/webapp/WEB-INF/views/form。 jsp) – shx

回答

8

請注意,您正在使用綁定錯誤在這裏工作。在執行實際的JSR-303驗證之前就會拋出這些錯誤,它們會覆蓋失敗域的JSR-303約束違規。

綁定錯誤的代碼是typeMismatch。爲DefaultMessageCodesResolverDefaultBindingErrorProcessor

typeMismatch.birthDate = Invalid birth date format. 

檢查的JavaDoc發現Spring的錯誤代碼分辨率是如何工作的:所以你可以例如添加到您的郵件屬性。

+0

在我的servlet-context.xml中,我把這個: ' ' 在messages.properties加入此行,爲您推薦: 'typeMismatch.birthDate' 什麼也沒有發生 – shx

+0

你必須做一些錯誤的。我自己克隆了這個項目,添加了消息來源+消息並且它可以工作。你的'messages.properties'文件位於哪裏? –

+0

你說得對。無意中,我把它放在src/main/webapp文件夾中。現在我把它移到了src/main/resources中,它就像一個魅力一樣。謝謝!! – shx

0

您使用了錯誤標籤嗎? 您可以在驗證註釋中使用消息屬性。 like here:

@NotEmpty(message =「serverIP不能爲空」) private String serverIP;

+1

此錯誤不是來自驗證註釋,而是來自Spring DataBinder,因此不會更改驗證註釋將影響其消息。 – Jules