表单验证:
通过validate()方法来验证输入数据格式的正确性,需要实现ActionSupport类
登录界面:
<body>
<s:form action = "login" method = "post">
<s:textfield name = "username" label = "用户名"/>
<s:password name = "password" label = "密码"/>
<s:textfield name = "age" label = "年龄"/>
<s:submit value = "验证"/>
</s:form>
</body>
LoginAction:
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport{
private String username ;
private String password ;
private int age ;
public void validate() {
if("".equals(username) || username.length()>6){
addFieldError("username", "用户名格式不正确");
}
if("".equals(password) || password.length()<6){
addFieldError("password", "用户名密码不正确");
}
if(age<0 || age >200){
addFieldError("age", "年龄在0~200之间");
}
}
public String execute() {
return SUCCESS;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
在方法execute()方法执行之前,struts框架会自动调用validate()验证方法,如果出现不匹配的类型,则将信息填入Fielderror并返回"login"逻辑视图。
当然Action中很多时候不止execute()一个方法,所以,当需要在特定的方法前进行数据验证,则需要validateXxx(), 其中Xxx为方法名。如可在Action中设置如下
public void validateLogin() {
if("".equals(password) || password.length()!=6){
addFieldError("password", "密码必须为六位");
}
}
public String login() {
return SUCCESS;
}
struts.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="default" namespace = "/" extends = "struts-default">
<action name = "login" class = "com.action.LoginAction" method = "login">
<result>/ok.jsp</result>
<result name = "input">/index.jsp</result>
</action>
</package>
</struts>
有了validateXxx()方法后,validate方法仍会执行,只不过在validateXxx()之后执行