spring mvc使用注解后,依然可以使用自带的Validator接口。比如这样一个Validator实现:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
@Component(
"
productValidator
"
)
public
class
ProductValidator
implements
Validator { @SuppressWarnings(
"
unchecked
"
) @Override
public
boolean
supports(Class clazz) {
return
Product.
class
.isAssignableFrom(clazz); } @Override
public
void
validate(Object object, Errors errors) { ValidationUtils.rejectIfEmpty(errors,
"
name
"
,
"
field.required
"
); }
在Controller中通过注解获取:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
@Resource(name
=
"
productValidator
"
)
private
Validator validator; ... @RequestMapping(
"
/save.htm
"
)
public
ModelAndView save(Product product, BindingResult result) {
this
.validator.validate(product, result);
if
(result.hasErrors()) {
return
new
ModelAndView(
"
input
"
); } ...
如果是绑定相关的,比如只是检查不能为空,可以用下面方式替代,在Controller中增加:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
@InitBinder
public
void
initDataBinding(WebDataBinder binder) { binder.setRequiredFields(
new
String[] {
"
name
"
}); }
在错误信息的属性文件中增加:
required={0}不能为空
product.name=名称
上述两种方式使用共同的属性文件配置方法,在spring的配置文件中:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
<
bean
id
="messageSource"
class
="org.springframework.context.support.ResourceBundleMessageSource"
>
<
property
name
="basenames"
>
<
list
>
<
value
>
errors
</
value
>
</
list
>
</
property
>
</
bean
>
在jsp页面中通过spring的form标签显示:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
<%
@ taglib prefix
=
"
form
"
uri
=
"
http://www.springframework.org/tags/form
"
%>
......
<%
@ taglib prefix
=
"
form
"
uri
=
"
http://www.springframework.org/tags/form
"
%>
......
另外,如果InitBinder注解不加参数,将检查所有控制器方法调用的入参,可能有些类型入参不需要检查,这时可以:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->
@InitBinder(
"
product
"
)
public
void
initDataBinding(WebDataBinder binder) { binder.setRequiredFields(
new
String[] {
"
name
"
}); }