struts表单验证

Struts表单验证有两种方式

  1.通过继承ActionSupport,重载validate方法
  2.利用struts的validate框架来验证:配置ActionName-validation.xml
方式一: 1. 前台jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>Login blog</title>
	</head>

	<body bgcolor="#bbbbbb">
		<div align="center">
<s:form action="login.action" method="post" theme="simple">
                Msg:<s:actionmessage/><br/>
                        ActionError: <s:actionerror/><br/>   
                       nameError:  <s:fielderror><s:param>tuser</s:param></s:fielderror><br/>
             Username:<s:textfield name="tusername"></s:textfield><br/>
                       passError:  <s:fielderror><s:param>tpsw</s:param></s:fielderror><br/>
             Password:<s:textfield name="tpassword"></s:textfield>
             <s:submit></s:submit>
             </s:form>
 </div> </body> </html>

 <s:actionmessage/>提示action运行状态

 <s:actionerror/>提示action执行错误

  <s:fielderror>提示验证错误

  2.action类

主要接受前台传参tusername和tpassword

public class LoginAction extends ActionSupport{
	private String tusername;
	private String tpassword;
	/*****************************************
 * 后台给前台传值
 * 1.通过Action的属性,Get方法传值
 * 2.通过ActionContext---->session
 * 3.通过ServletActionContext----->request  response 
 * 
 * servlet是单例的,action不是。
 * servlet效率更高
 * Action如果是单例,属性不安全 ,所以Struts是线程安全的, 每次请求都会创建一个action来为线程服务
 ****************************************/

	
	public String getTpassword() {
		return tpassword;
	}
	public String getTusername() {
		return tusername;
	}
	public void setTpassword(String tpassword) {
		this.tpassword = tpassword;
	}
	public void setTusername(String tusername) {
		this.tusername = tusername;
	}
	/**
	 * default function
	 */
	public String execute(){
		return "success";
	}
	@Override
	public void validate() { 
//如果有错,默认会产生一个input的result,所以必须在xml中配置一个result为input
 if(tusername==null && tusername.equals("")){ addFieldError("tuser", "cannot be null"); addActionError("user is null"); addActionMessage("error1"); } if(tpassword==null || tpassword.equals("")){ addFieldError("tpsw", "password cannot be null"); addActionError("password is null"); addActionMessage("error2"); } } }

 3.配置Struts.xml

<struts>
	<include file="struts-default.xml"></include>
	<package name="system" extends="struts-default" namespace="/">
		<action name="login" class="com.scu.blog.action.LoginAction">
			<result name="success">/home.jsp</result>
			<result name="input">/index.jsp</result>
		</action>		
	</package>
</struts>
结果如下:
Msg: error1 error2 ActionError: user is null password is null nameError: cannot be null passError: password cannot be null

 方法二: 使用struts validate框架

   1.前台

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>Login blog</title>
	</head>

	<body bgcolor="#bbbbbb">
		<div align="center">
                         <s:form action="login" namespace="/">
                         <s:textfield label="Username" name="tusername"></s:textfield><br/>
                         <s:textfield label="Password" name="tpassword"></s:textfield>
                         <s:submit></s:submit>
                         </s:form> </div> </body> </html>

 2.配置validation.xml

   要验证的.class文件在同一目录下,而且配置文件名要使用如下两个规则中的一个来命名:
<ActionClassName>-validation.xml
<ActionClassName>-<ActionAliasName>-validation.xml
 
其中<ActionAliasName>就是struts.xml中<ation>的name属性值
本例使用的是LoginAction所以配置文件为LoginAction-validation.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="tusername">
        <field-validator type="requiredstring">
            <message>请输入姓名</message>
        </field-validator>
    </field>
    <field name="tpassword">
        <field-validator type="requiredstring">
                <message>请输入密码</message>
        </field-validator>
    </field>
</validators>


  更多配置标签可以去查手册http://struts.apache.org/2.0.11.1/docs/validation.html 

3.后台代码

public class LoginAction extends ActionSupport{
	
	private String tusername;
	private String tpassword;

	public String getTpassword() {
		return tpassword;
	}
	public String getTusername() {
		return tusername;
	}
	public void setTpassword(String tpassword) {
		this.tpassword = tpassword;
	}
	public void setTusername(String tusername) {
		this.tusername = tusername;
	}
	/**
	 * default function
	 */
	public String execute(){
		return "success";
	}
}

 结果为

 

请输入姓名
请输入密码

 

posted on 2012-09-08 02:27  mathore  阅读(517)  评论(0编辑  收藏  举报