Struts学习(三)

Struts学习(三)

1.前言

今天学习了validator校验器,validator有很多功能,这里只介绍和使用validator进行表单提交。

2.初始化配置

2.1 查看示例效果

首先需要下载Apache组织的struts-1.3.10(我这里是这个包),将里面的apps/struts-cookbook-1.3.10.war文件用rar格式打开,将全部文件复制到Tomcat服务器的webapps文件夹的ValidatorDemo文件夹下(这是文件夹名自取),

最后开启服务器,在ie地址中输入http://localhost:8080/ValidatorDemo/即可打开.效果如图:


在此之后打开Validator右边的Execute即可查看示例效果.其中的红色区域可查看表单的配置文件.这里不加说明.后面会说明配置文件的写法.


2.2 配置web工程环境

导入的struts-1.3.10中的jar包,如果光做validator的话不用全部导入.还有validator.xml文件,这个是配置校验信息的。其他不用.如图:



3.步骤

3.1 整体过程

表单提交以后,交给一个struts的ActionServlet处理,将FormBean(继承ValidatorFormBean)进行封装以后会调用Validate()方法进行校验.Validator校验器这时候就会去调用自己写好的Validate框架,该框架需要validator-rules.xml和validator-rules.xml文件的支持.总体图:

 

3.2 Struts-config.xml配置

这里使用动态FormBean的方法,也就是在struts-config.xml中创建FormBean,这样就必须继承DynaValidateFormBean.如果是普通的FormBean类的话,继承ValidateFormBean.这两个类都在org.apache.struts.validator目录下.
action的配置没什么变化,要校验的话叫validate制成true就好了.
其中配置的message-resources后面会提到.最后配置的plug-in中就说明了校验需要org/apache/struts/validator/validator-rules.xml的支持.

配置如下:

<?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>
	<form-beans>
		<form-bean name="UserFormBean" 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="birthday" type="java.lang.String"></form-property>
			<form-property name="email" type="java.lang.String"></form-property>
			<form-property name="resume" type="java.lang.String"></form-property>
		</form-bean>
	</form-beans>
	
	
	<action-mappings>
		
		<action 	path="/Register" 
						type="cn.itcast.web.action.RegisterAction"
						name="UserFormBean"
						input="/register.jsp"
						validate="true">
		</action>
		
		
	</action-mappings>
	
	<message-resources parameter="config" />
	
	
	 <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" 
                      value="/org/apache/struts/validator/validator-rules.xml,
                             /WEB-INF/validator-rules.xml"/>
      </plug-in>
      
      
</struts-config>


3.3 validator-rules.xml文件

validator-rules.xml文件是配置校验器,要找到它的话在struts-core-1.3.10中,不过不用动它,因为在上面已经定义它了!
打开该文件,在注释中可以看到上面引用的plug-in标签, 在validator标签中定义了很多属性,

可以是required必须的, maxlength最大,mixlength最小,date日期,short,int,long等等,这也说明它支持这些格式的校验,最后的 msg属性表示表单错误信息在配置文件中手动配置.





3.4 config.properties配置文件

该配置文件就是用来存储输出页面给用户看到的信息的,在上面提到的msg属性会调用该文件中的值输出给页面.该配置文件方在src目录下,写法参考validator-rules.xml注释中的写法.

errors.required={0} is required.
   errors.minlength={0} can not be less than {1} characters.
   errors.maxlength={0} can not be greater than {1} characters.
   errors.invalid={0} is invalid.
   errors.byte={0} must be a byte.
   errors.short={0} must be a short.
   errors.integer={0} must be an integer.
   errors.long={0} must be a long.
   errors.float={0} must be a float.
   errors.double={0} must be a double.

   errors.date={0} is not a date.
   errors.range={0} is not in the range {1} through {2}.
   errors.creditcard={0} is an invalid credit card number.
   errors.email={0} is an invalid e-mail address.
   errors.twofields=The '{0}' field must have the same value as the '{1}' field. 

   prompt.username=\u7528\u6237
   prompt.password=\u5BC6\u7801
   prompt.date=\u65F6\u95F4
   prompt.email=email


3.5 validation.xml文件配置

这是最关键的一步,validation.xml文件就是用来配置校验信息的,在field标签中配置一个个校验格式.
1.proprtty定义FoemBean字段.
2.depends定义取决于哪些要求,如用户名为required,minlength,maxlength表示它是必须的,且有最大最小的限制,这些属性可参考validator-rules.xml文件.
3.key中表示读取资源文件中相对应的值,并放在positon(位置)为0的标志符上,也就是config中相应的{0}中.其中还可定义resource="false"这样key直接用来放在位置0中,不需要在资源文件中取了.
4.var标签用于定义属性,如var-name为minlength,var-value为3,则最小长度为3.
5.name="minlength"就是指向配置文件中的 errors.minlength,这里的{1}位置用key="${var:minlength}"代替,该表达式表示下面的var-value值,这个表达式记住就行了.
6.mask标记用于正则表达式匹配,大家都懂的.
7.最后还有一个密码验证twofields,这个在最上面的global中定义了,这个在基本的校验文件中是没有的.写法看程序.

<?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>

	<global>
		<!-- Custom Validator -->
		<validator name="twofields" 
                   classname="examples.validator.CustomValidator" 
                   method="validateTwoFields" 
                   methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionMessages,
                       javax.servlet.http.HttpServletRequest" 
                   msg="errors.twofields" />
	</global>

	<formset>

		<!-- Form for Validation example -->
		<form name="UserFormBean">

			<field property="username" depends="required,minlength,maxlength">
				<arg key="prompt.username" position="0" />
				<arg name="minlength" key="${var:minlength}" resource="false" position="1"/>
				<arg name="maxlength" key="${var:maxlength}" resource="false" position="1"/>
				<var>
					<var-name>minlength</var-name>
					<var-value>3</var-value>
				</var>
				<var>
					<var-name>maxlength</var-name>
					<var-value>8</var-value>
				</var>
			</field>
			
			<field property="password" depends="required,minlength,twofields">
				<arg key="prompt.password" position="0"/>
				<arg name="minlength" key="${var:minlength}" resource="false"  position="1"/>
				<arg name="twofields" key="确认密码"  position="1" resource="false"/>
				<var>
					<var-name>mask</var-name>
					<var-value>\w{3,9}</var-value>
				</var>
				<var>
					<var-name>minlength</var-name>
					<var-value>5</var-value>
				</var>
				<var>
					<var-name>secondProperty</var-name>
					<var-value>password2</var-value>
				</var>
			</field>

			<field property="date" depends="date">
				<arg key="prompt.date" position="0"/>
			</field>

			<field property="email" depends="email,mask">
				<arg key="prompt.email" position="0"/>
				<var>
					<var-name>mask</var-name>
					<var-value>\w+@\w+(.\w+)+</var-value>
				</var>
			</field>
            </form>
	</formset>
</form-validation>


3.6 JSP注册表单

注册表单中的话,注意两点
1.提交属性需要加上οnsubmit="return validateUserFormBean(this)",就可以在客户端进行校验了,不过生成的代码量超大,正式运营还是不要添加这个.
2.要显示错误的地方加上 html:errors就行了.

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>注册</title>
     <script type="text/javascript" src="${pageContext.request.contextPath }/js/fckeditor/fckeditor.js"></script>
  </head>
  
  <body style="text-align: center">
  <html:errors/>
   		<html:form action="/Register" οnsubmit="return validateUserFormBean(this)">
    	用户名:<html:text property="username"></html:text><br>
    	密码:<input type="password" name="password"><br/>
    	确认密码:<input type="password" name="password2"><br/>
    	电子邮箱:<input type="text" name="email"><br/>
    	生日:<input type="text" name="birthday"><br/>


4.Validator校验器总结

Validator好处:
1.更好的维护性,可以在资源文件中配置.
2.校验实现标准化,校验标准可以自己手工配.
3.正确的实现.
4.更少的代码重复,根本就不用写代码!全是配的~.
5.自动客户端验证 οnsubmit="return validateUserFormBean(this).

Validator确实减少了很多代码量,如果是以前的话,表单提交需要一个Servlet处理完了,返回信息到JSP在显示.
其他博客介绍校验器: http://ltc603.iteye.com/blog/67136
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值