我在spring mvc項目中使用了javax bean驗證。 這是我的示例代碼。javax bean驗證未解析消息代碼
User.java: -
@NotEmpty(message = "{error.user.username.empty}")
private String userName;
UserController.java: -
public String handleSubmission(@ModelAttribute("user")@Valid User user, BindingResult errors) {
....
}
messages_en.properties: -
error.user.username.empty=Username can not be empty
NotEmpty.user.userName=Username can not be empty
每當 '用戶名' 字段爲空驗證失敗如預期的那樣,但是應用引發異常,
Caused by: javax.servlet.jsp.JspTagException: No message found under code 'NotEmpty' for locale 'en_US'.
在日誌我可以看到,
Field error in object 'user' on field 'userName': rejected value []; codes [NotEmpty.user.userName,NotEmpty.userName,NotEmpty.java.lang.String,NotEmpty];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.userName,userName]; arguments []; default message [userName]]; default message [Username cannot be empty]
在驗證註釋中所使用的消息密鑰是「error.user.username.empty」和該密鑰在messages_en.properties但應用程序只長相定義關鍵'NotEmpty'爲 。即使添加鍵'NotEmpty.user.userName'也沒有幫助。 只有當我向屬性文件添加'NotEmpty'鍵時例外才會消失,例如
NotEmpty=Username can not be empty
的MessageSource的配置如下,
@Configuration
@EnableWebMvc
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}
}
的JSP代碼顯示錯誤消息是,
user.jsp: -
<spring:hasBindErrors name="user">
<ul>
<li> <span class="error">Please fix all errors and try again.</span></li>
<c:forEach var="error" items="${errors.allErrors}">
<li> <span class="error"><spring:message code="${error.code}"/></span></li>
</c:forEach>
</ul>
</spring:hasBindErrors>
更新: -
沒有運氣甚至 - <form:errors path="userName"/>.
我只是顯示的錯誤代碼和默認的錯誤消息在JSP與下面的代碼,
<spring:hasBindErrors name="user">
<c:forEach var="error" items="${errors.allErrors}">
<span class="error">${error.code} - ${error.defaultMessage}</span>
</c:forEach>
</spring:hasBindErrors>
的輸出,
NotEmpty - Username cannot be empty
這意味着defaultMessage「用戶名不能爲空'正在從ValidationMessages.properties文件中正確讀取。因爲那是在那裏定義的消息。但是錯誤代碼仍然是'NotEmpty'。 因此,在總結,
- 如果我試圖通過對如圖JSP代碼上面,我得到一個異常遍歷所有錯誤顯示消息。
- 如果我使用
<form:errors path="*" />
所有錯誤消息都顯示爲bean'user'EXCEPT javax bean驗證消息。 - 使用
<form:errors path="userName" />
什麼都不顯示。
哪些屬性的文件?添加你的配置和jsp。 –
謝謝M. Deinum。用配置和jsp代碼更新了問題。我已經在messages_en.properties文件中定義了消息。 – ivish
使用'
'而不是你現在擁有的。 '$ {error.code}'只會解析一個代碼。無論是使用'$ {error}'還是隻使用'