Struts2也支持自定义方法,即在struts.xml中的action元素内定义method属性,属性值即为待执行的方法。其中,该方法的声明要与execute保持一致。但是不推荐使用这种方式,因为它容易导致Action代码混乱。如下面的代码myExecute,那么在Action元素里面就必须要配置method=myExecute,
而且验证方法就必须这样命名:validateMyExecute,Action中自定义方法的输入校验。对于通过action的method属性所指定的自定义方法,其对应的自定义输入校验方法名为validateMyExecute(假设自定义的方法名为myExecute)。底层是通过反射来调用的。
执行流程是这样的:
当在Action中指定了自定义的execute方法时,首先会执行自定义的execute方法所对应的输入校验方法,然后再去执行validate方法,执行完毕后如果出现了任何错误都不会再去执行自定义的execute方法,流程转向了input这个名字所对应的页面上。
public class RegisterAction extends ActionSupport
{
private String username;
private String password;
private String repassword;
private int age;
private Date birthday;
private Date graduation;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getRepassword()
{
return repassword;
}
public void setRepassword(String repassword)
{
this.repassword = repassword;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public Date getBirthday()
{
return birthday;
}
public void setBirthday(Date birthday)
{
this.birthday = birthday;
}
public Date getGraduation()
{
return graduation;
}
public void setGraduation(Date graduation)
{
this.graduation = graduation;
}
@Override
public String execute() throws Exception
{
System.out.println(this.birthday);
return SUCCESS;
}
public String myExecute() throws Exception
{
System.out.println("myExecute invoked!");
return SUCCESS;
}
public void validateMyExecute()
{
System.out.println("validateMyExecute invoked!!");
}
@Override
public void validate()
{
System.out.println("validate invoked!");
}
}