Class DynaValidatorForm

来源:互联网 发布:介绍一种网络新技术 编辑:程序博客网 时间:2024/05/16 15:38

1. Create DynaActionForm
There 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 Action
Code 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-INF
Creating 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:

#Info
label.username 
= username
label.password 
= password
#Error
errors.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

onsubmit="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.xml
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-INF
validation.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.
----------------------------

#Info
label.username 
= username
label.password 
= password
#Error
errors.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>