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";
}
