Struts-Validate框架

Validator(验证器)框架是一个 Struts 插件,它支持采用声明式的方式对表单进行校验,而不需要用户编写一行Java代码。

一.使用 Validator 框架的好处:

更好的可维护性
校验实现标准化
正确的实现
更少的代码重复
自动客户端验证

注:解压Struts的例子struts-cookbook-1.3.8,部署到web服务器中,查看例子体验。

在工程中集成validate框架,你需要查看org.apache.struts.validator包下的validator-rules.xml文件,它是validate框架的校验规则文件,这个文件说明了如何在struts工程中集成validate框架

二.集成步骤:

1、在struts-config.xml文件中配置validate插件。

2、创建资源文件,并复制validate框架工作需要的信息。

3、把struts-cookbook-1.3.8例程自带的、validate框架的配置文件validation.xml,复制到当前web工程的WEB-INF目录下。validate框架环境搭建好后,就可以采用配置的方式对formbean的属性进行校验,但需要注意:

    1、formbean要想使用validate框架校验,不能直接继承 ActionForm, 而要继承其子类 ValidatorForm。

    2、如果是DynaActionForm,就必须要继承DynaValidatorForm

三.validator-rules.xml校验规则文件

……
<form-validation>
   <global>
       <!-- 校验器指定名称 -->
       <validator name="required"
             <!-- 校验器使用的类 -->
              classname="org.apache.struts.validator.FieldChecks"
               <!-- 使用该校验器时,调用校验器的什么方法 -->
               method="validateRequired"
               methodParams="java.lang.Object,
                                          org.apache.commons.validator.ValidatorAction,
                                          org.apache.commons.validator.Field,
                                          org.apache.struts.action.ActionMessages,
                                          org.apache.commons.validator.Validator,
                                          javax.servlet.http.HttpServletRequest"
              <!--  校验失败的错误提示信息,此信息为关键字,其值从资源文件中获取。 -->
              msg="errors.required"/>
      ……
   </global>
<form-validation>

.Validation.xml文件详解:

<form>元素:为表单配置验证规则,它的 name 属性指定了表单的名字.<form>元素可以包含一个或多个<field>子元素
<field>元素:配置表单中字段的验证规则
property:指定 ActionForm Bean 中需要进行验证的字段的名字
depends:指定字段的验证规则,多个验证规则之间以逗号隔开
<msg>元素:指定验证规则对应的消息文本。该消息文本将替代在 validator-rules.xml 文件中为验证规则配置的默认的消息文本
name:指定验证规则的名字
key:当 resource 为 true 时,该属性指定消息 key,该消息 key 应该在 Resource Bundle 中存在,当 resource为 false 时,该属性直接指定消息文本
resource:当该属性为true时,表明使用来自于 Resource Bundle 的消息;如果为 false,表明 直接在 key 属性中设置消息文本,默认为 true
arg 元素:替换符合消息中的参数
name,key,resource 元素同上
position 元素:指定替换符合消息中的参数的位置
var 元素:向验证规则传递参数
<arg> 元素也可以访问<var>元素,语法为${var:var-name}


 

五.完整示例代码:

其功能实现是:对用户名进行校验非空,并且不能小于3位,不能大于6位,对邮箱标准校验

进行浏览器客户端验证

注意:<html:javascript>的formName指定表单的名称。onsubmit事件的值也必须为return validate表单名(this):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="org.apache.struts.action.ActionErrors"%>
<%@page import="org.apache.struts.action.ActionMessage"%>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'register.jsp' starting page</title>
  </head>
  <body>
    <!-- 指定表单的名称 -->
    <html:javascript formName="registerForm"/>
  	<html:form action="/register" οnsubmit="return validateRegisterForm(this)">
    	用户名:<input type="text" name="username"><br/>
    	密码:<input type="password" name="password"><br/>
    	确认密码:<input type="password" name="password2"><br/>
    	邮箱:<input type="text" name="email"><br/>
    	<input type="submit" value="注册">
   </html:form>
  </body>
</html>


validation.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE form-validation PUBLIC
         "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
         "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
<form-validation>
	<formset>
	    <!-- 校验哪个formBean的表单 -->
		<form name="registerForm">
		    <!-- 对哪个字段进行校验,depends指定校验器,required代表非空,后,最小值,最大值 -->
			<field property="username" depends="required,minlength,maxlength">
			    <!-- resource="false"表示不用进行配置 -->
				<arg key="用户名" resource="false"/>
				<arg key="${var:minlength}" name="minlength" position="1" resource="false"/>
				<arg key="${var:maxlength}" name="maxlength" position="1" resource="false"/>
				<var>
					<var-name>minlength</var-name>
					<var-value>3</var-value>
				</var>
				<var>
					<var-name>maxlength</var-name>
					<var-value>6</var-value>
				</var>
			</field>
			 <!-- 使用正则表达式进行校验 -->
			 <field property="username" depends="required,mask">
				<arg key="用户名" resource="false"/>
				<var>
					<var-name>mask</var-name>
					<var-value>[A-Za-z]{3,6}</var-value>
				</var>
			</field>
			 <!-- 邮箱校验 -->
			<field property="email" depends="required,email">
				<arg key="邮箱" resource="false"/>
			</field>
		</form>
	</formset>
</form-validation>


struts-config.xml中集成Validate :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
	<!--如果要使用动态的Bean要使用org.apache.struts.validator.DynaValidatorFor -->
	<form-beans>
		<form-bean name="registerForm" type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="username" type="java.lang.String"></form-property>
			<form-property name="password" type="java.lang.String"></form-property>
			<form-property name="password2" type="java.lang.String"></form-property>
			<form-property name="email" type="java.lang.String"></form-property>
		</form-bean>
	</form-beans>
	<action-mappings>
		<action path="/register" 
				type="cn.itcast.web.action.RegisterAction"
				name="registerForm"
				scope="request"
				input="/register.jsp">
		</action>
	</action-mappings>
	<controller processorClass="org.apache.struts.action.RequestProcessor"></controller>
	<message-resources parameter="MessageResource"></message-resources>
	<!-- 集成Validate框架 -->
	<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" 
                      value="/org/apache/struts/validator/validator-rules.xml,
                             /WEB-INF/validation.xml"/>
    </plug-in>
</struts-config>


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

傅荣康

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

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

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

打赏作者

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

抵扣说明:

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

余额充值