Struts2表单校验之XML校验规则文件校验


前言

表单输入校验是所有 Web 应用所必备的功能。表单输入校验分可以为客户端校验和服务器端校验。客户端校验一般使用 JavaScript 脚本实现,可以有效的进行数据校验,防止非法输入,可以减轻服务器压力,还能使用户得到良好的体验。服务器端校验至关重要,是阻止非法数据的最后防线。坚决不能以客户端校验代替服务器端校验。
Struts2 提供了输入校验功能,即包含服务器端校验,也包括客户端校验。


一、XML校验规则文件

1.示例环境

  • 开发工具:MyEclipse 2017 CI
  • JavaEE 版本:7.0
  • Struts2 版本:2.5.22

2.示例说明

模拟系统用户新增功能,超级管理员在系统用户新增页面输入用户信息并保存。输入的信息打印在控制台,成功跳转到系统用户列表页面,失败(校验失败)返回到系统用户新增页面并显示错误信息。

3.示例实现

系统用户 Bean:为系统用户提供了4个属性,账号、密码、年龄、生日。

public class SysUser {
	
	/**
	 * 账号
	 */
	private String account;
	
	/**
	 * 密码
	 */
	private String password;
	
	/**
	 * 年龄
	 */
	private Integer age;
	
	/**
	 * 生日
	 */
	private Date birth;
 
    // 省略无参构造
    
    // 省略setter和getter方法

	// 省略toString方法
	
}

系统用户新增页面(WEB-INF/page/sysUser/add.jsp):提供表单录入系统用户信息,<s:fielderror />当检验失败显示错误信息。

<body>
    <h3>系统用户添加页面 </h3>
    <s:fielderror /><!-- 显示错误信息 -->
  	<form action="sysUser/save.action" method="post">
  		账号:<input type="text" name="sysUser.account" /><br/>
  		密码:<input type="password" name="sysUser.password" /><br/>
  		年龄:<input type="text" name="sysUser.age" /><br/>
  		生日:<input type="text" name="sysUser.birth" /><br/>
  		
  		<input type="submit" value="添加" />
  	</form>    
</body>

系统用户列表页面(WEB-INF/page/sysUser/list.jsp):保存成功后跳转到该页面,这里只提示新增成功提示信息。

<body>
    系统用户新增成功! <br>
</body>

系统用户Action(SysUserAction.java):Action 需要继承 ActionSupport,其中有两个方法,分别是:

  • add():该方法直接跳转到系统用户新增页面
  • save():该方法用于保存系统用户信息,这里只是将前台录入信息进行打印
public class SysUserAction extends ActionSupport{
	
	private SysUser sysUser;
	
	public SysUser getSysUser() {
		return sysUser;
	}

	public void setSysUser(SysUser sysUser) {
		this.sysUser = sysUser;
	}

	/**
	 * 系统用户 - 添加页面
	 * 
	 * @return
	 */
	public String add(){
		return "success";
	}
	
	/**
	 * 系统用户 - 数据保存
	 * 
	 * @return
	 */
	public String save(){
     // 一些操作:例如,保存数据到数据库中
		System.out.println(sysUser.toString());
		return "success";
	}

}

XML 校验规则文件(SysUserAction-save-validation.xml):为SysUserAction 指定一个 XML 校验规则文件,就可以利用 Struts2 的输入校验功能对这个 Action 进行校验。

文件名称格式

  • 对 Action 中所有方法进行输入校验:ActionClassName-validation.xml
    • ActionClassName:Action 的类名
    • -validation:固定写法
  • 对 Action 中指定方法进行输入校验:ActionClassName-ActionName-validation.xml,在Action的类名后跟: -Action名称

注意:XML 校验规则文件与 Action 类文件在相同的路径下。

我们将系统用户相关的操作写在一个 Action 中,所有对 Action 中所有方法进行输入校验不可取,应该选择对其指定方法进行输入校验。

SysUserAction-save-validation.xml 代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定校验配置文件的 DTD 信息 -->
<!DOCTYPE validators PUBLIC 
	"-//Apache Struts//XWork Validator 1.0.3//EN" 
	"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<!-- 校验配置文件根元素 -->
<validators>
    <!-- 字段校验器配置风格:<field /> -->
    <!-- 非字段校验器配置风格:<validator /> -->
    
    <!-- 校验 sysUser对象中的account属性 -->
    <field name="sysUser.account">
    	<!-- 账号必填 -->
    	<field-validator type="requiredstring">
    		<message>账号不能为空</message>
    	</field-validator>
	    <!-- 账号长度在2-20之间 -->
	    <field-validator type="stringlength">
	    	<param name="minLength">2</param>
	    	<param name="maxLength">20</param>
	    	<message>账号长度在2-20之间</message>
	    </field-validator>
    </field>
    
    <!-- 其他属性校验 略 -->
    
</validators>

struts.xml 配置代码:需要注意的是输入校验失败后,与类型转换错误相似,会自动返回 input 的 Result。所以需要在配置文件中配置 input 的 Result。如果不配置,当输入校验失败,会报错。

<?xml version="1.0" encoding="UTF-8" ?>
<!--
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
-->
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
	"http://struts.apache.org/dtds/struts-2.5.dtd">

<!-- START SNIPPET: xworkSample -->
<struts>

	<!-- SysUser - 系统用户 -->
	<package name="sysUser" namespace="/sysUser" extends="struts-default">
		<!-- 转发到添加页面 -->
		<action name="add" class="com.liyf.action.SysUserAction" method="add">
			<result name="success">/WEB-INF/page/sysUser/add.jsp</result>
		</action>
		
		<!-- 系统用户信息保存 -->
		<action name="save" class="com.liyf.action.SysUserAction" method="save">
			<result name="success">/WEB-INF/page/sysUser/list.jsp</result>
			<result name="input">/WEB-INF/page/sysUser/add.jsp</result>
		</action>
	</package>

</struts>

<!-- END SNIPPET: xworkSample -->

4.示例测试

在浏览器访问系统用户添加页面,如下图所示:
系统用户添加页面
输入系统用户信息,账号只输入1个字符串,使校验失败,如下图所示:
输入系统用户信息
点击添加【按钮】提交,返回input视图并显示错误信息,如下图所示:
显示错误信息

二、内置校验器

我们可以在 struts-core-2.5.22.jar 包中找到这些系统提供的校验器,如下图所示:
内置校验器

  • required:检查字段是否不为空。
  • requiredstring:检查一个字符串字段是否为非空且长度为> 0。(也就是说它不是“”)
  • int:检查指定的整型是否在某个范围内。
  • long:检查指定的长整型是否在某个范围内。
  • short:检查指定的短整型是否在某个范围内。
  • double:用于检查指定的双精度值是否在某个范围内。
  • date:检查提供的日期是否在特定范围内。
  • expression:基于提供的正则表达式进行验证的非字段验证器。
  • fieldexpression:使用OGNL表达式验证字段。
  • email:检查给定的字符串字段(如果不是空的)是否是有效的电子邮件地址。
  • creditcard:检查给定的字段是否是有效的信用卡。
  • url:检查给定字段是否为字符串和有效URL。
  • visitor:用于校验action中的复合属性
  • conversion:用于检查该字段是否发生转换错误。
  • stringlength:检查字符串字段是否具有特定长度。
  • regex:使用正则表达式验证字符串字段。
  • conditionalvisitor:将只在表达式求值为true时将验证转发给VisitorFieldValidator。

三、其他说明

  • 使用XML校验规则文件进行输入校验,好处可能就是不需要对程序代码做变动,只需要编写这个校验规则文件就可以了。
  • 提到的两种配置校验规则的风格,他们的实现效果是一样的,只是风格不一样。其实可以从节点名称可以看出来,<field />,以字段为主;<validator />,以校验器为主。

总结

知识辣么多,肿么可能都会。重要的是要知道有这么个东东。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程火箭车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值