Struts2表单验证方法

继承ActionSupport类实现检验方法

ActionSupport是一个工具类,它已经实现了Action接口,除此之外,它还实现了Validateable接口,提供了数据校验功能,通过继承该ActionSupport类,可以简化Struts2的Action的开发。
在Validatable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过,OGNL表达式负责输出。
为了让Struts2增加输入数据校验的功能。LoginAction.java类需要继承子ActionSupport,并重写validate()方法,如重写validate()方法,程序如下:
Loginaction.java

package strutsaction;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
	private String username;
	private String password;

	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 execute() throws Exception {
		System.out.println(getUsername() + "   " + getPassword());
		if (getUsername().equals("text") && getPassword().equals("text")) {
			ActionContext.getContext().getSession().put("user", getUsername());
			return SUCCESS;
		} else
			return ERROR;
	}
	
	public void validate(){
		if(getPassword()==null||getPassword().equals(""))
			addFieldError("password","pass.required");
		if(getUsername()==null||getUsername().equals(""))
			addFieldError("username","user.required");
	}
	
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="strutsqs" extends="struts-default">
		<action name="login" class="strutsaction.LoginAction">
			<result name="input">/index.jsp</result>
			<result name="success">/success.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
		<action name="GetBooks" class="GetBooksAction">
			<result name="login">/index.jsp</result>
			<result name="success">/showbooks.jsp</result>
		</action>
	</package>
</struts>    

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>

<body>
	<s:form action="login.action">
		<s:textfield name="username" label="用户名"></s:textfield>
		<s:textfield name="password" label="密码"></s:textfield>
		<s:submit></s:submit>
	</s:form>
</body>
</html>

使用 Struts2 验证框架,利用 ***-validation.xml 配置文件

比如执行 login 表单逻辑的 LoginAction.java 中定义了正常的 getter 和 setter 方法,就是一个正常的Action类。那么验证 login 表单就可以用 LoginAction-validation.xml 来验证,而且两个文件要放在同一个目录中。这个xml文件配置举例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
	<field name="username">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message key="username.required"></message>
		</field-validator>
	</field>
	<field name="password">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message key="psd.required"></message>
		</field-validator>
	</field>
</validators>

上面的代码是分别对用户名和密码字段进行验证。

  先说一下标签,type属性确定了校验器的名称。struts2中有很多可用的校验器。如:

  (1)必填校验器 required

  (2)必填字符串校验器 requiredstring

  (3)整数校验器 int

  (4)日期校验器 date

  (5)字段表达式校验器 fieldexpression

  (6)邮件地址校验器 email

  (7)网址校验器 url

  (8)字符串长度校验器 stringlength

  (9)正则表达式校验器 regex

  用的时候可以具体查一下有哪些param.

  再说一下 标签,这是当验证不通过时返回给前端的提示信息,可以写在标签中间,但为了实现国际化,最好是使用上面 key 的方式。至于这个 key 在哪里呢,我们可以定义一个 errormsg.properties 文件放在 src 目录下,里面都是key-value对,一般都是key 用英文,value用中文,实验国际化。并不是这样就完事儿了的,还要把这个properties文件部署到struts.xml才可以

发表评论

电子邮件地址不会被公开。 必填项已用*标注