分享

Struts第4天

 liuyang_inf 2014-08-26

前天学习了struts的编程式验证,今天学习struts内置的配置式的验证方式,那么,为什么要用这种方式来验证呢?

其实,我们会发现struts的编码方式验证呢会有一些缺点,第一就是不够灵活,第二是将验证和验证规则耦合在一起了,还违反了开闭原则,当我们使用了struts的validate验证框架的时候会发现使用起来灵活的多,如果添加新的属性,只需要增加配置文件的属性验证就行了。

Validate验证框架

首先,我们需要做一些准备工作:

Validator框架依赖包:

  1)jakarta-oro.jar:文本处理类,文本的替换,分割和过滤

  2)commons-validator.jar:包含一些通用的验证规则

需要的配置文件:

  1)validator-rules.xml:包含通用验证规则

  2)validation.xml:针对具体Struts应用验证规则

了解validator-rules.xml:

  1)name:验证规则名称

  2)classname:处理类的权限类型

  3)method:实现验证规则方法

  3)methodParams:实现验证规则方法的参数列表

  4)msg:消息资源文件的key

  5)depends:依赖验证规则  

使用validate验证框架的步骤:

1.先在struts-config.xml文件里面加入插件信息

2.修改formbean的继承为ValidatorForm

3.编写validator.xml,它的验证规则跟validator-rules.xml的dtd是一样的

4.编写国际化资源文件

5.最后在页面上显示错误信息

好了,我们现在按照这种步骤来做!

第一步,先在struts-config.xml里面加入插件信息,示例代码:

  1. <struts-config>  
  2.   <data-sources />  
  3.   <form-beans>  
  4.     <form-bean name="login" type="com.lovo.form.LoginForm"></form-bean>    
  5.   </form-beans>  
  6.   <global-exceptions />  
  7.   <global-forwards />  
  8.   <action-mappings>  
  9.     <action path="/login" type="com.lovo.action.LoginAction" name="login" validate="true" input="/login.jsp">  
  10.         <forward name="success" path="/index.jsp"></forward>  
  11.         <forward name="error" path="/login.jsp"></forward>  
  12.     </action>  
  13.   </action-mappings>  
  14.   <message-resources parameter="com.lovo.struts.ApplicationResources" />  
  15.    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  16.         <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>  
  17.    </plug-in>  
  18. </struts-config>  

第二步,这里必须将插件信息加在mappings后面,还有action的validate属性必须配置哦!input当然也要了!这样才会去调用验证框架。然后呢,修改formbean对象继承为ValidatorForm这类,示例:

  1. public class LoginForm extends ValidatorForm {   
  2.     private String name;   
  3.     private String pwd;   
  4.   正如你看到的,这个类里面没有validate方法,但是系统还是会去调用验证框架的。

第三步,编写varlidator.xml文件,这个文件因为是在加入插件的时候就已经把名字给定义了,所以,这里我们还是以validator.xml这个文件为例,它呢,保存在WEB-INF下面的,因为它的dtd跟varlidator-rules.xml这个dtd是一样的,所以就直接拷贝了。看示例吧!

 

  1. <!DOCTYPE form-validation PUBLIC   
  2.           "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"   
  3.           "http://jakarta./commons/dtds/validator_1_1_3.dtd">  
  4.   
  5. <form-validation>  
  6.     <formset>  
  7.         <form name="login"><!-- 要验证的formbean的name,这里跟struts-config.xml里面的formbean的name一致 -->  
  8.         <!-- property是指要验证的具体属性名,这里跟formbean里面的属性名一致   
  9.            depends是指验证规则具体参考validator-rules.xml里面的name对应这里对非空和最小值和最大值做了验证,多个验证规则用,号隔开,   
  10.          -->  
  11.             <field property="name" depends="required,minlength,maxlength">  
  12.                 <arg0 key="login.name"/><!-- 这里是指第0个占位符(形参)的key是login.name,根据这个会去资源文件里面找login.name所对应的value值,然后将其填充到占位符中 -->  
  13.                 <arg1 key="${var:minlength}" resource="false"/><!-- 这里key是指第2个形参的的值对应下面var的name值,首先resource=false是指将不会去资源文件里面找形参了,而会在当前文件里面找,这里我们会配置一个var的属性来确定第二个形参的值 -->  
  14.                 <arg2 key="${var:maxlength}" resource="false"/>  
  15.                 <var>  
  16.                     <var-name>minlength</var-name><!-- 这里的var-name是指validator-rules.xml的name -->  
  17.                     <var-value>2</var-value><!-- 形参的值 -->  
  18.                 </var>  
  19.                 <var>  
  20.                     <var-name>maxlength</var-name>  
  21.                     <var-value>10</var-value>  
  22.                 </var>  
  23.             </field>  
  24.         </form>  
  25.         </formset>  
  26.         </form-validation>  

具体的地方都加了注释,这里不再详说。

第四步,编写国际化资源文件,刚刚在varlidator.xml里面多次提到了国际化文件,那么这个文件到底有什么作用呢?大家可以跟我来看看哈!Come ON!

errors.required={0}\u4E0D\u80FD\u4E3A\u7A7A\uFF01
errors.minlength={0}\u6700\u5C0F\u4E3A\u6570{1}
errors.maxlength={0}\u6700\u5927\u4F4D\u6570{2}

login.name=\u7528\u6237\u540D
login.pwd=\u5BC6\u7801

这里呢,errors.required这个key值其实是varlidator-rules.xml里面的msg对应,后面的value值是指要显示的错误信息,{0}是指validator.xml里面的arg第几个如果是arg0,就是{0},这样来填充占位符,其实,这里我们也可以把这里的{0}想成我们在学JDBC的时候,里面的preparedstatments里面的填充?号的值,其实是一个道理。

最后的login.name是指要填充的具体内容,它跟varlidator.xml里面的arg几的具体参数为准,一般都是resource="true"的时候才来这里面读取,因为这里我是使用utf-8的格式,所以看起来有点看不懂,其实就是中文。

第五步,显示错误信息,示例代码:

显示错误信息,跟前天的显示是一样的,具体请参看前天的博客内容,这里稍微提下,就是html-errors里面的property的值为validator.xml里面的field的name值,也就是属性名!

 最后是struts的标签库,个人认为这个东西用的不多,但是还是要掌握!

struts-html主要替换原来的html标签

struts-bean 主要是用于输出国际化资源文件,重要的是writer和 message还有一点就是创建和复制define

struts-logic主要用于逻辑判断控制流程Internet 和 equal 循环和比较

struts-tiles 主要是为了创建网页模板感觉用处不大

好了先总结到此!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多