struts2.0的校验有以下两种方法:
方法一:
1、说明:通过代码来实现校验,即通过Action类继承ActionSupport类,并重写validator方法来实现校验;
2、例子
1)、web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>struts2Demo</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2)、struts.xml配置
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default"> <action name="Login" class="lee.LoginAction"> <result name="input">/index.jsp</result> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts>
3)、LoginAction代码:
package lee;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 登陆控制器
*
* @author duyanjun
* @version 1.0
*/
public class LoginAction extends ActionSupport{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 处理用户请求
*
* @return flag:error 表示用户名密码不正确
* success表示用户名密码不正确
*/
public String execute(){
String flag = ERROR;
if(getUserName().equals("duyanjun") && getPassword().equals("123456")){
flag = SUCCESS;
ActionContext.getContext().getSession().put("user",getUserName());
}
return flag;
}
/**
* 校验表单域
*/
public void validate(){
if(getUserName() == null || "".equals(getUserName().trim())){
addFieldError("userName", "user.required");
}
if(getPassword() == null || "".equals(getPassword().trim())){
addFieldError("password", "user.password");
}
}
4)、index.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆页面</title>
</head>
<body>
<s:form action="Login.action" method="post">
<table align="center">
<tr>
<td>
<s:textfield name="userName" label="用户名"></s:textfield>
</td>
</tr>
<tr>
<td>
<s:textfield name="password" label="密码"></s:textfield>
</td>
</tr>
<tr align="center">
<td colspan="2">
<s:submit value="登陆"></s:submit><s:reset value="重置"></s:reset>
</td>
</tr>
</table>
</s:form>
</body>
</html>
方法二:
1、说明:通过校验文件来实现校验,即通过Action名-validation.xml文件来实现校验,并且该文件与Action类在同一路径下;
2、例子
1)、web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>struts2Demo</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2)、struts.xml配置
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default"> <action name="Login" class="lee.LoginAction"> <result name="input">/index.jsp</result> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> </package> </struts>
3)、LoginAction代码:
package lee;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* 登陆控制器
*
* @author duyanjun
* @version 1.0
*/
public class LoginAction extends ActionSupport{
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 处理用户请求
*
* @return flag:error 表示用户名密码不正确
* success表示用户名密码不正确
*/
public String execute(){
String flag = ERROR;
if(getUserName().equals("duyanjun") && getPassword().equals("123456")){
flag = SUCCESS;
ActionContext.getContext().getSession().put("user",getUserName());
}
return flag;
}
4)、index.jsp代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登陆页面</title>
</head>
<body>
<s:form action="Login.action" method="post">
<table align="center">
<tr>
<td>
<s:textfield name="userName" label="用户名"></s:textfield>
</td>
</tr>
<tr>
<td>
<s:textfield name="password" label="密码"></s:textfield>
</td>
</tr>
<tr align="center">
<td colspan="2">
<s:submit value="登陆"></s:submit><s:reset value="重置"></s:reset>
</td>
</tr>
</table>
</s:form>
</body>
</html>
5)、LoginAction-validation.xml配置:
<?xml version="1.0" encoding="utf-8"?> <!-- 指定校验规则文件的DTD信息 --> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <!-- 验规则文件的根元素 --> <validators> <!-- 校验第一个表单域 --> <field name="userName"> <field-validator type="requiredstring"> <!-- 校验失败显示的信息 --> <message key="user.requird"></message> </field-validator> </field> <!-- 校验第二个表单域 --> <field name="password"> <field-validator type="requiredstring"> <!-- 校验失败显示的信息 --> <message key="pass.requird"></message> </field-validator> </field> </validators>
显示校验信息的方法:
方法一:不使用Struts2的标签
<form action="mixValid.action" method=post>
${errors.username[0]}
用户名: <input name="username" value="beansoft" >
</form>