我在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}'还是只使用'