SpringMVC 服务器端验证
1.导入JSR303验证类库Jar包
2.在MVC的配置文件中添加<mvc:annotation-driven/>的配置
3.在MVC的配置文件中添加验证器的配置
4.在接收表单数据的类中添加验证规则注解
5.在控制器方法的表单对象参数上添加@valid注解
6.在控制器方法中对BindResult对象进行判断
struts2:validation.xml
struts2 SpringMVC
实体类 LoginForm类
action Controller
struts.xml MVC-servlet.xml
先导入支持服务器端验证的组件 JSR-303验证类库 里边有四个类库
在LoginForm类中配置:
package cn.bdqn.mvc.form; import org.hibernate.validator.constraints.NotEmpty; public class LoginForm { private String loginName; private String password; @NotEmpty(message="请输入登录名") public String getLoginName() { return loginName; } public void setLoginName(String loginName) { this.loginName = loginName; } @NotEmpty(message="请输入密码") public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
在MVC-servlet.xml中配置
<!-- 基于注解的MVC配置 --> <mvc:annotation-driven/> <!-- 验证器 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- 使用Hibernate验证框架进行验证 --> <property name="providerClass" value="org.hibernate.validator.HibernateValidator"/> </bean>
在LoginController类中配置:
//建议不用实体类接受请求,建议单独定义一个表单类
@RequestMapping(value="login",method=RequestMethod.POST)
public String doLogin2(
@Valid@ModelAttribute("form")LoginForm loginForm,//这样转发回表单页面的时候会自动回填数据
BindingResult result
){
//是否发生服务器端验证错误,hasErrors()是管所有的错误
if(result.hasErrors()){
return "login";
}
if(!loginForm.getLoginName().equals("admin")){
result.rejectValue("loginName","form", "用户名输入错误"); //reject是驳回的意思
}else if (!loginForm.getPassword().equals("123456")) {
result.rejectValue("password","form", "密码输入错误");
}
//如果添加了错误信息,则转发回登陆表单页面
if(result.hasErrors()){
return "login";
}
System.out.println("登录名:"+loginForm.getLoginName());
System.out.println("密码:"+loginForm.getPassword());
return "hello";
}