數據驗證:
客戶端驗證,服務器端驗證,今天我們主要說服務器端驗證
服務器端驗證:
1:編程式驗證:寫代碼驗證:寫死了,硬編碼
package com.qianfeng.web.action;
import org.apache.commons.lang3.StringUtils;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.qianfeng.domain.User;
import com.qianfeng.service.UserService;
import com.qianfeng.service.impl.UserServiceImpl;
public class UserAction extends ActionSupport implements ModelDriven<User> {
private User user=new User();
private UserService userService = new UserServiceImpl();
/**
* 編程式驗證:重寫ActionSupport中的public void validate()方法
* Struts2內部封裝了一個Map,Map的鍵就是表單上的name值
* 值就是錯誤信息
* 注意:動作類必須繼承ActionSupport
* 默認validate()方法在所有動作方法執行之前執行
* 爲了讓不需要驗證的不去執行validate()方法,解決方式有兩種:
* 1:使用註解:@SkipValidation
* 2: 如果只有一個方法需要驗證,其他的很多個方法都不需要驗證,這時候可以
* 驗證的方法名:validate+動作方法名(首字母要大寫)(注意這裏是動作方法名而不是動作名)
* @return
*/
@Override
public void validate() {
//驗證用戶名不能爲空
if(StringUtils.isEmpty(user.getUsername())){
addFieldError("username","用戶名不能爲空");
}
}
//public void validateRegist() {
//驗證用戶名不能爲空
//if(StringUtils.isEmpty(user.getUsername())){
//addFieldError("username","用戶名不能爲空");
//}
//}
public String regist(){
//判斷用戶是否存在
User user1=userService .finUserByUserName(user.getUsername());
if(user1!=null){
return "exists";}
//把用戶添加到數據庫
int result = userService.register(user);
if(result>0){
return "success";
}
return null;
}
@Override
public User getModel() {
return user;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2:聲明式驗證:寫xml文件驗證
聲明式驗證:通過xml文件實現驗證
* 在動作類所在的包下創建xml文件
* 文件名有命名規則:動作類名-validation.xml,默認驗證所有動作方法
* 希望某些方法不被驗證:
* 1:加註釋@SkipValidition
* 2:xml文件名改成 動作類名-動作名-validition.xml,注意這裏是動作名而不是動作方法名
*
* 在xml文件中加入dtd約束 在E:\daliyuan\10-17\day52\struts-2.3.15.3-all\struts-2.3.15.3\apps\struts2-blank\WEB-INF\lib
* 中找到xwork-core.jar中找到xwork-validator-1.0.3.dtd找到
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
UserAction-regist-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 基於字段的驗證 -->
<field name="username">
<!-- 怎麼驗證 , struts內部已經定義了很多的驗證器
requiredstring判斷是否爲null,或空字符串,去除空格
-->
<field-validator type="requiredstring">
<message>用戶名不能爲空</message><!-- -->
</field-validator>
</field>
<!-- 基於驗證器的驗證 -->
<validator type="requiredstring">
<!-- 使用注入的方式指明驗證誰
private String actionName;
setActionName("action1");
驗證器的位置:xwork-core-2.3.15.3.jar\com\opensymphony\xwork2\validator\validators
-->
<param name="fieldName">password</param>
<message>密碼不能爲空</message>
</validator>
</validators>