SSH入门Struts2篇(3)——ActionSupport类和数据校验


Struts2提供了一个Action接口,该接口定义了Struts2的Action处理类应该实现的规范。
Struts2还为Action接口提供了一个实现类:ActionSupport,该类提供了若干默认方法:
默认的处理用户请求的方法(excute()方法)
数据校验的方法
添加校验错误信息的方法
获取国际化信息的方法等

1.ActionSupport类的重要方法validate()

validate()是空的输入校验方法,常被各Action类覆盖

例:下面这个Action类继承了ActionSupport类

import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
    ……	

    public void validate() {
        String account = loginUser.getAccount();
        String pwd = loginUser.getPassword();
         if (account == null || account.equals("")) {
         	this.addFieldError("loginUser.account", "请输入您的用户名!");
         }
        if (pwd == null || pwd.equals("")) {
         	this.addFieldError("loginUser.password", "请输入您的密码!");
         }
    }
}

当用户按下提交按钮时,Struts2 将自动执行validate方法(在执行execute()方法之前),如果方法中列出的任何if语句为真,Struts2 将调用addFieldError方法,不会调用其他方法。Struts2 框架将返回input作为调用操作的结果。

然后我们在struts.xml文件中配置返回结果input:
(即如果调用了addFieldError则又跳转到登录页面login.jsp

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- 上面这行需要联网环境,没联网需要把http://struts.apache.org/dtds/struts-2.3.dtd对应到本地struts-2.3.dtd文件路径 -->
<!-- 这个配置有助于开发中的提示和检错,对Struts配置没有影响 -->
<struts>
	<package name="strutsBean" extends="struts-default" namespace="/">
		<action name="*Action" class="cn.edu.zjut.action.UserAction" method="{1}">
			<result name="{1}success" type="redirect">/{1}Success.jsp</result>
			<result name="{1}fail">/{1}Fail.jsp</result>
			<result name="input">/login.jsp</result> 
		</action>
	</package>
</struts>

运行之后的结果是这样的:
在这里插入图片描述
什么都不填直接提交:
在这里插入图片描述
如果在login.jsp的前面加入<s:fielderror />

<body>
	<s:fielderror />
	<s:form action="loginAction" method="post">
		<s:textfield name="loginUser.account" label="请输入用户名" />
		<s:password name="loginUser.password" label="请输入密码" />
		<s:submit value="登录" method="login"/>
	</s:form>
</body>

那么显示结果是这样的:
在这里插入图片描述

2. 通过addActionMessage来增加消息

如果输入通过了validate方法的校验没有抛出fielderror,那么就会进入到处理方法中,这里以login为例,我们可以在UserAction类的login方法中添加addActionMessage:

import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
    ……	

  public String login() {
		count++;
		UserService userServ = new UserService();
		if(userServ.login(loginUser)) {
			this.addActionMessage("登录成功!");
			return "loginsuccess";
		}
		this.addActionError("用户名或密码错误,请重新输入!"); 
		return "loginfail";
	}
}

然后在登录成功页面增加<s:actionmessage />
将登录失败页面也改至跳转到login.jsp 再在login.jsp中增加<s:actionerror />
则若用户名或密码为空则显示fielderror的内容,若不匹配则显示actionerror的内容

3.使用.xml文件(校验规则文件)

如果需要在Action中对某个特定的方法进行校验,则需要为此特定方法专门定义一个校验文件(否则,调用默认的)。
该文件应该与action类的文件位于同一个路径下。
命名规则:Action名-处理方法名-validation.xml
同时,还需要在struts.xml文件配置action时指定其method属性(否则,调用默认的)。

UserAction-login-validation.xml文件代码如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators> 
	<field name="loginUser.account">
		<field-validator type="requiredstring">
			<param name="trim">true</param>
			<message>用户名不能为空</message>
		</field-validator>
	</field> 
	<field name="loginUser.password"> 
		<field-validator type="requiredstring"> 
			<param name="trim">true</param>
			<message>密码不能为空</message> 
		</field-validator> 
	</field>
</validators> 

常用校验规则:

field-validator type描述
required必填校验器
requiredstring必填字符串校验器
int整数校验器
double双精度浮点数校验器
date日期校验器
stringlength字符串长度校验器

例:

……
<field-validator type="int">
	<param name="min">1</param>
	<param name="max">10</param>
	<message>必须在1-10之间</message>
</field-validator>
……

<field name="birth">
	<field-validator type="date">
		<param name="min">1950-01-01</param>
		<param name="max">2020-01-01</param>
		<message key="birth.range"/>
	</field-validator>
……
<field-validator type="stringlength">
	<param name="minlength">4</param>
	<param name="maxlength">20</param>
	<message>输入长度必须在4到20之间</message>
</field-validator>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值