Class DynaValidatorForm

    技术2022-05-11  101

    1. Create DynaActionFormThere are 2 ways to create a dynaActionForm in Lomboz3.2. The first one is to use New -> Struts Form Bean -> Add New DynaForm -> Fill out Form Bean Name and add properties (Notice that in Lomboz3.2 there is a bug that when you add more than one properties, it will ONLY add the last one, so we have to add the other properties in struts-config.xml by hand.), check out Create Form Input Page and select Action. Another way to create a dynaActionForm is add code directly in struts-config.xml. This is because a dynaActionForm has no .java file. Code is like this:

         < form-bean  name ="loginActionForm"  type ="org.apache.struts.validator.DynaValidatorForm" >       < form-property  name ="username"  type ="java.lang.String" />       < form-property  name ="password"  type ="java.lang.String" />      </ form-bean >

    2. Create ActionCode in an action is most like that in a ordinary action file. The only diffience is the way to retrieve properties form the dynaActionForm.The methods to get and set properties of a dynaActionForm are:

    3. Add ValidatorPlugin into struts-config.xml

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

    4. Create validation.xml and validator-rules.xml in folder WEB-INFCreating validation.xml is a little complex, please refer to the example below. But when we create a struts project in lomboz3.2, it has create these two files atuomaticially. We need not to modify anthing about validator-rules.xml and only need to modify validation.xml to fit our purpose.

    5. Add content in ApplicationResources.properties.First we need to confirm that in struts-config.xml we have use ApplicationResources.properties as resource file.

       < message-resources  parameter ="ApplicationResources" />

    Add needed resouce in ApplicationResources.properties:

    #Infolabel.username  =  usernamelabel.password  =  password#Errorerrors.required = { 0 } can not be null  errors.minlength = { 0 } can not be less than { 1 } char  errors.maxlength = { 0 } can not be greater than { 1 } char  errors.invalid = { 0 } is invalid<li/>  

    6. Use Action in .jsp files.There are two ways to report validation errors in .jsp files. The first way is to report errors in the .jsp files, and the other is to report using javascript. The first way is simple, add

      < html:errors  />

     where you want the errors to show such below the tag <body>. To use javascript we need to add

    οnsubmit="return validateLoginActionForm(this)" 

    in the tag <html:form>(Notice that the method name is validate + form name = validateLoginActionForm), and we need to add 

    < html:javascript  formName ="loginActionForm" />

     between <html:form> and </html:form>.

    A example: 1. Create DynaActionForm.--------------------------------------------------------------struts.config.xml

    < form-beans >      < form-bean  name ="loginActionForm"  type ="org.apache.struts.validator.DynaValidatorForm" >       < form-property  name ="username"  type ="java.lang.String" />       < form-property  name ="password"  type ="java.lang.String" />      </ form-bean > <!--  ...   --> </ form-beans >

    2. Create Action-------------------------------------------------loginAction.java--------------------

    package  login; import  java.io.IOException; import  java.util.ArrayList; import  javax.servlet.ServletException; import  javax.servlet.http.HttpServletRequest; import  javax.servlet.http.HttpServletResponse; import  javax.servlet.http.HttpSession; import  org.apache.struts.action. * ; import  org.apache.struts.validator. * ; public   class  loginAction  extends  Action  public ActionForward execute(ActionMapping mapping,         ActionForm form,          HttpServletRequest request,          HttpServletResponse response)         throws IOException, ServletException {  //TODO: cannot downcast  DynaValidatorForm loginForm = (DynaValidatorForm)form;  String username = (String)loginForm.get("username");  String password = (String)loginForm.get("password");    HttpSession session = request.getSession(true);  session.removeAttribute("username");  session.setAttribute("username", username);    ArrayList al = new ArrayList();  al.add(username);  al.add(password);    String prompt;  loginHandler login = new loginHandler();  if(login.checkLogin(al)){   prompt = "Success";  } else {   prompt = "Fail";  }    return mapping.findForward(prompt); }}

    ----------3. Add ValidatorPlugin into struts-config.xmlstruts-config.xml--------------

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

    4. Create validation.xml and validator-rules.xml in folder WEB-INFvalidation.xml

    <? xml version="1.0" encoding="ISO-8859-1"  ?> <! DOCTYPE form-validation PUBLIC          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd" > < form-validation >   < formset >    < form  name ="loginActionForm" >     < field  property ="username"  depends ="required,minlength" >      < arg  key ="label.username"   />      < arg  key ="${var:minlength}"  resource ="false"      position ="1"   />      < var >       < var-name > minlength </ var-name >       < var-value > 3 </ var-value >      </ var >     </ field >     < field  property ="password"  depends ="required,minlength" >      < arg  key ="label.password"   />      < arg  key ="${var:minlength}"  resource ="false"      position ="1"   />      < var >       < var-name > minlength </ var-name >       < var-value > 3 </ var-value >      </ var >     </ field >    </ form >   </ formset > </ form-validation >

    -----------------------------------validtor-rules.xml

    <! DOCTYPE form-validation PUBLIC          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd" > <!--   $Id: validator-rules.xml,v 1.1 2006/07/21 12:40:26 nacid Exp $   This file contains the default Struts Validator pluggable validator   definitions.  It should be placed somewhere under /WEB-INF and   referenced in the struts-config.xml under the plug-in element   for the ValidatorPlugIn.      <plug-in className="org.apache.struts.validator.ValidatorPlugIn">        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,                                                  /WEB-INF/validation.xml"/>      </plug-in>   These are the default error messages associated with   each validator defined in this file.  They should be   added to your projects ApplicationResources.properties   file or you can associate new ones by modifying the   pluggable validators msg attributes in this file.   # Struts Validator Error Messages   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.   Note: Starting in Struts 1.2.0 the default javascript definitions have         been consolidated to commons-validator. The default can be overridden         by supplying a <javascript> element with a CDATA section, just as         in struts 1.1. --> < 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" />        < validator  name ="requiredif"                  classname ="org.apache.struts.validator.FieldChecks"                  method ="validateRequiredIf"                  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" />        < validator  name ="validwhen"           msg ="errors.required"                  classname ="org.apache.struts.validator.validwhen.ValidWhen"                  method ="validateValidWhen"                  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" />        < validator  name ="minlength"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateMinLength"          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"               depends =""                   msg ="errors.minlength"            jsFunction ="org.apache.commons.validator.javascript.validateMinLength" />        < validator  name ="maxlength"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateMaxLength"          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"               depends =""                   msg ="errors.maxlength"            jsFunction ="org.apache.commons.validator.javascript.validateMaxLength" />         < validator  name ="mask"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateMask"          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"               depends =""                   msg ="errors.invalid" />        < validator  name ="byte"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateByte"          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"               depends =""                   msg ="errors.byte"        jsFunctionName ="ByteValidations" />        < validator  name ="short"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateShort"          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"               depends =""                   msg ="errors.short"        jsFunctionName ="ShortValidations" />        < validator  name ="integer"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateInteger"          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"               depends =""                   msg ="errors.integer"        jsFunctionName ="IntegerValidations" />         < validator  name ="long"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateLong"          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"               depends =""                   msg ="errors.long" />        < validator  name ="float"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateFloat"          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"               depends =""                   msg ="errors.float"        jsFunctionName ="FloatValidations" />        < validator  name ="double"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateDouble"          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"               depends =""                   msg ="errors.double" />        < validator  name ="date"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateDate"          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"               depends =""                   msg ="errors.date"        jsFunctionName ="DateValidations" />        < validator  name ="intRange"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateIntRange"          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"               depends ="integer"                   msg ="errors.range" />        < validator  name ="floatRange"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateFloatRange"          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"               depends ="float"                   msg ="errors.range" />        < validator  name ="doubleRange"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateDoubleRange"          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"               depends ="double"                   msg ="errors.range" />        < validator  name ="creditCard"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateCreditCard"          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"               depends =""                   msg ="errors.creditcard" />        < validator  name ="email"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateEmail"          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"               depends =""                   msg ="errors.email" />        < validator  name ="url"             classname ="org.apache.struts.validator.FieldChecks"                method ="validateUrl"          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"               depends =""                   msg ="errors.url" />       <!--        This simply allows struts to include the validateUtilities into a page, it should       not be used as a validation rule.      -->       < validator  name ="includeJavaScriptUtilities"             classname =""                method =""          methodParams =""               depends =""                   msg =""            jsFunction ="org.apache.commons.validator.javascript.validateUtilities" />     </ global > </ form-validation >

    --------------------------5. Add content in ApplicationResources.properties.ApplicationResources.properties.----------------------------

    #Infolabel.username  =  usernamelabel.password  =  password#Errorerrors.required = { 0 } can not be null  errors.minlength = { 0 } can not be less than { 1 } char  errors.maxlength = { 0 } can not be greater than { 1 } char  errors.invalid = { 0 } is invalid

     6. Use Action in .jsp files.login.jsp

    <% @ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> <% @ page contentType="text/html; charset=gb2312" %> < html:html > < head > < title > Login Page </ title > </ head > < body > <!--  Use text to report validtor error  --> < font  color ="red" >< html:errors  /></ font > < html:form  action ="/loginAction"  method ="post"  onsubmit ="return validateLoginActionForm(this)" >   Username:  < html:text  property ="username"  size ="15"   />   < br  />   < br  />   Password:  < html:password  property ="password"  size ="15"   />   < br  />   < br  />   < html:submit  property ="submit"  value ="login"   />   <!--  Use javascript to report validtor error  -->   < html:javascript  formName ="loginActionForm"   /> </ html:form > </ body > </ html:html >  

    最新回复(0)