Struts2输入校验(一)----validate方法-validateXxx方法

来源:岁月联盟 编辑:zhuzhu 时间:2009-03-20

  这是一种编码校验的方法, 我重写ActionSupport父类的validate方法来实现 .

  Action执行时一定会执行validate方法, 若有不合格的输入 就调用 addFieldError("age", "年领应在0-200之间");方法.

  1  login.jsp

  HTML标签:

  Html代码   

错误信息 :<s:fielderror ></s:fielderror><form action="login.action" method="post">		用户名:<input type="text" name="username" value="${username}"/><br>				年 龄:<input type="text" name="age" value="${age}"/><br>		生 日:<input type="text" name="birthday" value="${birthday}"/><br>		点对象:<input type="text" name="point" value="${point}"/><br>		<input type="submit" value="提交"/>	</form>

 

  struts2标签

  Html代码  

 

<s:form action="login">		<s:textfield name="username" label="用户名"></s:textfield>		<s:textfield name="age" label="年 龄"></s:textfield>		<s:textfield name="birthday" label="生 日"></s:textfield>		<s:textfield name="point" label="点对象"></s:textfield>		<s:submit></s:submit>		</s:form>

 

  2 LoginAction.java

  Java代码   

 

package ssh.org.web;import java.util.Date;import java.util.List;import ssh.org.util.Point;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{	/**	 * 	 */	private static final long	serialVersionUID	= 1L;	private String				username;	private int					age;	private Date				birthday;	private List<String>		aihao;	@Override	public String execute() throws Exception	{		return "success";	}	@Override	public void validate()	{		if (age < 0 || 200 < age)		{			addFieldError("age", "年领应在0-200之间");		}	}}

 

  看上面的validate()方法,很简洁,因为少了类型转换,这个工作由Struts2内建的类型转换器把请求参数转换为所须要的类型. 

  3 结果

  validateXxx() 方法

  一个Action可以包含多个处理逻辑

  Java代码   

 

public class UserAction extends ActionSupport{	private static final long	serialVersionUID	= 1L;	private String				username;	private int					age;	private Date				birthday;	private List<String>		aihao;	public String addUser() throws Exception	{		//添加用户		return "success";	}	public void validateAddUser()	{		if (null == username || "".equals(username))		{			addFieldError("username", "用户名不能为空");		}		System.out.println("validateAddUser() 验证方法 ");	}	public String getUserList()	{		//取得所有用户		return "success";	}	public void validateGetUserList()	{		//验证方法略...		System.out.println("validateAddUser() 验证方法 ");	}	// --测试用	@Override	public String execute() throws Exception	{		return "success";	}	@Override	public void validate()	{		if (age < 0 || 200 < age)		{			addFieldError("age", "年领应在0-200之间");		}		System.out.println("~~~~~~基本~~~~~ ");	}}

 

 

  上面的就有三个处理业务的方法 addUser(),getUserList(),execute()

  addUser(),getUserList() 方法分别有 不同的验证 方法:validateAddUser(),validateGetUserList()   , 也就是validateXxx() 方法. 

  业务方法叫什么, 验证方法就叫validate 业务方法名(首字母大写)

  这样, 在执行某个 业务方法,就会执行与它同名的验证方法,执行addUser()这前就会检查有没有validateAddUser()方法, 有就执行之.

  其实有了 addUser(),getUserList()  这两方法, execute()就可以不要, 但我为了说明一个 多个validate方法执行的顺序, 还是加上了.

  不论执行  addUser()还是getUserList()  方法,validate()方法一定会执行, 这是我们不想要的, 有两解决方法:

  1  不写 execute() , 也就不用写validate()方法

  2  写 execute(),  把validate() 改名为validateExecute().