您的位置:首页 > 编程语言 > Java开发

Struts2的手动验证

2014-11-04 10:17 176 查看
struts2手动验证:
* 首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法

* 要继承ActionSupport类或者实现Validateable接口

* 重写Validateable接口的validate()方法
* 前提是:要保证setUsername()、validate()、login()方法要按照这个先后顺序执行

* 如果登录失败,如何处理:
* this.addFieldError( key, value);
* key:错误提示字段
* value:错误提示信息

* 什么时候才是验证通过?
* 验证通过:1、map集合不存在;2、map集合存在并为空
* 验证不通过:map集合存在并且不为空

* 分析需求:
* 用户名不能为null ,""
* 密码不能为null, "" ,并且密码的长度6-12之间

* 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
* 重写的validate()方法,针对所有业务方法进行验证
* 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
* 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名

package cn.itcast.validate;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class ValidateAction extends ActionSupport {

private String username;

private String psw;

public void setUsername(String username) {
System.out.println("ValidateAction ************ setUsername()");
this.username = username;
}

/*
* 验证方法:
* * 该动作类action必须继承ActionSupport或者实现Validateable接口
* * 必须重写Validateable接口提供的validate()方法
*
* * 必须要保证setUsername()、validate()、login()方法的执行顺序如下:
* * setUsername()
* * validate()
* * login()
*
* * 如果登录失败,如何处理:
* * this.addFieldError( key, value);
* * key:错误提示字段
* * value:错误提示信息
*
* * 通过底层代码说明:
* public synchronized void addFieldError(String fieldName, String errorMessage) {
final Map<String, List<String>> errors = internalGetFieldErrors(); //声明一个map集合
List<String> thisFieldErrors = errors.get(fieldName); //声明一个list集合,放入对应错误提示信息

if (thisFieldErrors == null) { //如果list集合为空
thisFieldErrors = new ArrayList<String>(); //重新创建一个list集合
errors.put(fieldName, thisFieldErrors); //把list集合放入到map集合中
}

thisFieldErrors.add(errorMessage); //把错误提示信息放入到list集合中
}
*
* * 什么时候才是验证通过?
* * 验证通过:1、map集合不存在;2、map集合存在并为空
* * 验证不通过:map集合存在并且不为空
*
* * 分析需求:
* * 用户名不能为null ,""
* 密码不能为null, "" ,并且密码的长度6-12之间
*
* * 针对所有业务方法进行验证还是针对某个指定业务方法进行验证?
* * 重写的validate()方法,针对所有业务方法进行验证
* * 重写的validate()方法加上要验证的指定的业务方法名(业务方法名的首字母大写),实现针对某个指定的业务方法进行验证
* * 为什么要这样进行拼接?因为struts2框架底层拼接,如果不这样写,底层就找不到对应方法名
*
*/
public void validateLogin() {
System.out.println("ValidateAction ************ validate()");

if(username==null||username.equals("")){
this.addFieldError("error", "用户名不能为空!");
}

if(psw==null||psw.equals("")){
this.addFieldError("error", "密码不能为空!");
}else{

String pattern = "^[0-9a-zA-Z]{6,12}$";

Pattern p = Pattern.compile(pattern);

Matcher m = p.matcher(psw);

boolean b = m.matches();

if(!b){
this.addFieldError("error", "密码的长度必须在6至12之间!");
}

}

}

public String login(){
System.out.println("ValidateAction ********* login()");

System.out.println("username = "+username);

System.out.println("password = "+psw);

return "success";
}

public String test(){
System.out.println("ValidateAction ********* test()");
return "success";
}

public String getUsername() {
return username;
}

public String getPsw() {
return psw;
}

public void setPsw(String psw) {
this.psw = psw;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: