java bean validate

  Validator框架是一个独立的Validation Framework,目前在Struts1.1中可以一起打包下载。作为Apache Commom的一个OpenSource,它可以和Struts一起结合使用,也可以和其他非Web应用中使用。前段时间利用Eclipse3.02 + MyEclipse3.8.4结合Xdoclet开发了一个EJB + Struts的Web应用,发现采用这些工具开发效率还是比较高的。MyEclipse通过xdoclet生成CMP ejb的时候会自动创建对应的Value Object类,结合struts框架时,可以把这Value Object结合Struts中的Form采用Composite模式,采用委托的方式来实现ActionForm。这些在Eclipse IDE中实现非常快速。但也存在一些问题,当JSP页面中的FORM中的数据通过Struts中的Form进入到对应的Value Object之前需要进行数据合法性校验,而这种校验在一个企业级Web应用中会存在大量的重复冗余代码,造成大量的重复工作和维护的工作量。

  Validator是一个独立于表现和业务逻辑的一个FrameWork,它通过预定义一组校验规则以及提供了一套简单的扩展机制,让程序员可以自由的定义自己复杂的校验规则。规则与规则可以是相互依赖的,也可以是独立的。

  下面使用一个登录的例子简单谈谈如何让Validator框架与Struts框架进行整合,从而把数据校验独立出来,使得大部分的校验规则得到重用,并且使得校验方法可配置化和易于维护。

  1、准备配置文件

  这里要用到两个xml文件,validator-rules.xml和validation.xml,前者用于定义校验器,在validator框架中已经预定义了十几个常用的校验器的实现;后者用于定义和Struts框架中具体的Form相关联的各个字段的校验,这两个文件放置在/WEB-INF/目录下面。

  2、准备Struts的Form和Action

  定义一个Form,这个Form从ValidatorFrom继承而来(缺省从ActionForm继承),具体的代码如下:

  

//Created by MyEclipse Struts
  // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl

  package com.test.struts.form;

  import javax.servlet.http.HttpServletRequest;

  import org.apache.struts.action.ActionMapping;
  import org.apache.struts.validator.ValidatorForm;

  /**
  * MyEclipse Struts
  * Creation date: 06-19-2005
  *
  * XDoclet definition:
  * @struts:form name="logonForm"
  */
  public class LogonForm extends ValidatorForm {
  private String memberID;
  private String password;
  
  /**
  * Method reset
  * @param mapping
  * @param request
  */
  public void reset(ActionMapping mapping, HttpServletRequest request) {
  memberID = null;
  password = null;
  }

  /**
  * @return Returns the memberID.
  */
  public String getMemberID() {
  return memberID;
  }
  /**
  * @param memberID The memberID to set.
  */
  public void setMemberID(String memberID) {
  this.memberID = memberID;
  }
  /**
  * @return Returns the password.
  */
  public String getPassword() {
  return password;
  }
  /**
  * @param password The password to set.
  */
  public void setPassword(String password) {
  this.password = password;
  }
  }

  定义一个Action,具体的代码如下所示:

  //Created by MyEclipse Struts
  // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl

  package com.test.struts.action;

  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  import org.apache.struts.action.Action;
  import org.apache.struts.action.ActionForm;
  import org.apache.struts.action.ActionForward;
  import org.apache.struts.action.ActionMapping;

  import com.test.struts.form.LogonForm;

  /**
  * MyEclipse Struts
  * Creation date: 06-19-2005
  *
  * XDoclet definition:
  * @struts:action path="/logon" name="logonForm" input="/jsp/logon.jsp" scope="request" validate="true"
  */
  public class LogonAction extends Action {
  
  /**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
  public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) {
  LogonForm logonForm = (LogonForm) form;
  
  return mapping.findForward("success");
  }

  }

  FormBean和Action在struts-config.xml中的配置如下所示:

  <form-beans >
  <form-bean name="logonForm" type="com.test.struts.form.LogonForm" /> </form-beans>

  <action-mappings >
  <action
  attribute="logonForm"
  input="/jsp/logon.jsp"
  name="logonForm"
  path="/logon"
  scope="request"
  validate="true"
  type="com.test.struts.action.LogonAction">
  <forward name="success" path="/jsp/success.jsp"/>
  </action>

  </action-mappings>

  注意:在<action>元素中的validate属性必需设置为true。

  3、配置validator-rules.xml和validation.xml文件

  validator-rules.xml用于配置校验器,这个文件基本上可以重用。validation.xml用于配置与具体的Form Bean有关的校验配置。

 

 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.ActionErrors,
  javax.servlet.http.HttpServletRequest"
  msg="errors.required">

  ......

  </global>

  </form-validation>

  

  Validation.xml

  <form-validation>

  <!-- ========== Default Language Form Definitions ===================== -->
  <formset>

  <form name="logonForm">

  <field property="memberID"
  depends="required,short, minlength,maxlength">
  <arg0   key="prompt.memberID"/>
  <arg1   key="${var:minlength}" name="minlength"
  resource="false"/>
  <arg2   key="${var:maxlength}" name="maxlength"
  resource="false"/>
  <var>
  <var-name>maxlength</var-name>
  <var-value>16</var-value>
  </var>
  <var>
  <var-name>minlength</var-name>
  <var-value>3</var-value>
  </var>
  </field>

  <field property="password"
  depends="required, minlength,maxlength">
  <arg0   key="prompt.password"/>
  <arg1   key="${var:minlength}" name="minlength"
  resource="false"/>
  <arg2   key="${var:maxlength}" name="maxlength"
  resource="false"/>
  <var>
  <var-name>maxlength</var-name>
  <var-value>16</var-value>
  </var>
  <var>
  <var-name>minlength</var-name>
  <var-value>3</var-value>
  </var>
  </field>

  </form>

  </formset>

  </form-validation>


  4、定义资源文件ApplicationResources.properties

  首先,资源文件必须要在struts-config.xml文件中进行定义:

  <message-resources parameter="com.test.struts.ApplicationResources" />

  下面是资源文件中的内容,它主要关联到:

 

 validator-rules.xml文件中<validator>元素中的msg属性;
  validation.xml中field元素中作为参数传递给validator框架的arg0 -- arg3。
  # Resources for parameter com.test.struts.ApplicationResources
  # Project P/ValidatorWeb
  errors.header=<span class="error-header1">Errors:</span><br><span class="error-header2">You must correct the following error(s) before processing.</span><ul>
  errors.footer=</ul>
  errors.prefix=<li><span class="error-text">
  errors.suffix=</span></li>

  prompt.memberID=Member ID
  prompt.password=Password
  prompt.test=test

  # Standard error messages for validator framework checks
  errors.required={0} is required.
  errors.minlength={0} cannot be less than {1} characters.
  errors.maxlength={0} cannot be greater than {2} characters.
  errors.invalid={0} is invalid.
  errors.byte={0} must be an byte.
  errors.short={0} must be an short.
  errors.integer={0} must be an integer.
  errors.long={0} must be an long.
  errors.float={0} must be an float.
  errors.double={0} must be an double.
  errors.date={0} is not a date.
  errors.range={0} is not in the range {1} through {2}.
  errors.creditcard={0} is not a valid credit card number.
  errors.email={0} is an invalid e-mail address.


  5、在struts-config.xml中配置validator

  必须在struts-config.xml中以plugin的方式指定validator的配置资源,这样,web应用在能够根据这些配置把各种校验器等资源加载到内存中。

  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
  <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
  </plug-in>

  6、在相关的JSP文件中通过Struts框架中的html标签制订相应的属性值

  <html:javascript dynamicJavascript="true"
  formName="logonForm"
  staticJavascript="false"/>

  这个标签用于在具体的jsp生成的客户端html页面中生成一段对应的javascript代码。

  <html:form action="/logon" focus="memberID"
  onsubmit="return validateLogonForm(this);">

  </html:form>

  用于当用户点击<html:form>中的submit按钮时,会执行相应的检查,如果检查没有通过,则不回去调用Action中的execute方法。

怎么用烤箱烤核桃仁 上海九百万达金融 www con777 三星手机修改dns为114 内衣福利网盘下载 beauty fluid lotion the old movie cameras 日系软妹发型编发 吴 成语 vivo无线游戏手柄下载 kpop star第5季 综艺 网页版tumblr安全模式 哈登录像 private members bills paintstorm 破解版 h3c镜像配置 csgo 准心 c9 most laboratory 华硕4k 144 无锡快6路时刻表 love is hot topic 思源电气刘才离职 阴阳师大天狗原画 妻中蜜3全cg图 ps怎么添加图层蒙版 nate silver ocz tl100和q200 rs异构体 夏威夷海滩的天体浴场 http www.cljpzx.cn

Copyright 满意通 Some Rights Reserved

如反馈或投诉等情况联系:une35498#163.com