struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Struts Wiki] Update of "ShaleValidation" by NiallPemberton
Date Fri, 17 Mar 2006 17:24:52 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Struts Wiki" for change notification.

The following page has been changed by NiallPemberton:
http://wiki.apache.org/struts/ShaleValidation

The comment on the change is:
Remove content and re-direct ShaleValidation to Shale/Validation

------------------------------------------------------------------------------
- == Shale Commons Validator Integration ==
+ #REDIRECT Shale/Validation
  
-  * http://struts.apache.org/struts-shale/features-commons-validator
+ This page has moved to [:Shale/Validation] and should automatically re-direct.
  
- === Validation error messages and the <s:validatorVar> tag ===
- 
- The parameters used to format the [http://svn.apache.org/repos/asf/struts/shale/trunk/core-library/src/java/org/apache/shale/validator/messages.properties
error messages] that are shown when a validation error occurs include the incorrect value
and any validator-specific 'var' parameters.  
- 
- When the <s:validatorVar> tag is used for validator-specific 'var' parameters, the
order in which the 'var's are declared is the order that will be used to format the error
message.
- 
- For a 'range' validator, such as 'floatRange', the error message pattern is:
- 
- {{{errors.range={0} is not in the range {1} through {2}.}}}
- 
- Therefore, when using a "range" validator with the <s:validatorVar> tags, specify
the "min" var before the "max" var:
- 
- {{{
- <s:commonsValidator type="floatRange"
-                      arg="#{msgs.amount}"
-                   server="true" 
-                   client="false">
-     <s:validatorVar name="min" value="10"/>
-     <s:validatorVar name="max" value="1000"/>
- </s:commonsValidator>
- }}}
- 
- 
- === Using Custom Validation Rules with Shale ===
- 
- To use a custom validation rule in your application, complete the following steps:
- 
- '''1. Define an xml file conforming to the Commons Validator 1.2.0 dtd.'''
- 
- In this example, the file will be named 'custom-rules.xml' and will be placed in /WEB-INF.
- 
- {{{
- <!DOCTYPE form-validation PUBLIC
-           "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.2.0//EN"
-           "http://jakarta.apache.org/commons/dtds/validator_1_2_0.dtd">
- <form-validation>
-    <global>
-        <validator name="evenNumber"
-              classname="com.example.ValidationUtil"
-              method="isEven"
-              methodParams="int"
-              msg="errors.even">
-        </validator>
-    </global>
- </form-validation>
- }}}
- 
- '''2. Write the validation method.'''
- 
- {{{
- package com.example;
- public class ValidationUtil implements Serializable
- {
-     public static boolean isEven( int value ) {
-        return (value % 2 == 0);    
-     }
- }
- }}}
- 
- '''3. Configure the validation rules in web.xml.''' 
- 
- Include the default rule set by listing "/org/apache/shale/validator/validator-rules.xml"
in addition to your custom rules.
- 
- {{{
-     <!-- Shale Validator Configuration Resources -->
-     <context-param>
-        <param-name>org.apache.shale.validator.VALIDATOR_RULES</param-name>
-        <param-value>
-            /org/apache/shale/validator/validator-rules.xml,
-            /WEB-INF/custom-rules.xml
-        </param-value>
-     </context-param>
- }}}
- 
- !CommonsValidator will pass the value entered by the user as the first parameter of your
validation method, provided you have listed at least one type in the 'methodParams' attribute
of your <validator> tag.
- 
- In addition, if you add them as attributes to the <s:commonsValidator> tag, !CommonsValidator
will pass the following parameters through to your validation method:  min, max, minlength,
maxlength, mask, and datePatternStrict.  These parameters are always passed in exactly this
order, no matter how they are listed in <s:commonsValidator>.
- 
- '''4. Provide a resource bundle for messages.''' (Optional)
- 
- The !CommonsValidator class reads the messages from the application's resource bundle, then
from the 'messages' bundle in org.apache.struts.validator (the (localized) messages.properties
file inside shale-core.jar).
- 
- If you can use one of the provided messages for your validator, then no action is necessary.
- 
- If you need to provide additional messages or override any of the provided messages, here's
how:
- 
- Configure a resource bundle for your application in faces-config.xml.  For example:
- 
- {{{
-     <application>
-         <message-bundle>ApplicationResources</message-bundle>
-         <locale-config>
-             <default-locale>en</default-locale>
-             <supported-locale>en</supported-locale>
-         </locale-config>
-     </application>
- }}}
- 
- And add your message to it. In this example, the file would be '/WEB-INF/classes/!ApplicationResources.properties'.
- 
- {{{
-      errors.even={0} is not an even number.
- }}}
- 
- The value of the field being validated is automatically passed as {0} for message parameter
replacement.
- 
- '''5. Attach your new validation rule to a component.'''
- 
- In this example, we have a text field called "Priority" which will only accept an even number.
- 
- {{{
-     <h:outputText value="#{messages['prompt.priority']}"/>
-     <h:inputText     id="priority"
-                   value="#{priority}">
-           <s:commonsValidator
-                    type="evenNumber"
-                  server="true"
-                  client="false"/>
-     </h:inputText>
-      <h:message           for="priority" styleClass="errors"/>
- }}}
- 
- '''6. Reminders'''
- 
- Be sure to add the <s:validatorScript> at the end of your form, and to set the the
'onsubmit' attribute of the <h:form> tag.
- 
- {{{
-   <h:form onsubmit="return validateForm(this);">
-      ...
-      <s:validatorScript functionName="validateForm"/>
-   </h:form>
- }}}
- 
- === Using Rules With Multiple Parameters ===
- 
- The following example demonstrates the use of all of the attributes accepted by the <s:commonsValidator>
tag, though it's unlikely that a single validator would make use of all six method parameters:
 min, max, minlength, maxlength, mask and datePatternStrict.  
- 
- Numbered as above:
- 
- '''1.'''
- {{{
-        <validator name="allParams"
-              classname="com.example.ValidationUtil"
-              method="isValid"
-              methodParams="java.lang.String,double,double,int,int,java.lang.String,java.lang.String"
-              msg="errors.all">
-        </validator>
- }}}
- 
- '''2.'''
- {{{
-     public static boolean isValid( String value, double min, double max, int minlength,
int maxlength,
-                                    String mask, String datePatternStrict) {
-         return false;
-     }
- }}}
- 
- The attributes will be passed as parameters to your validation method in exactly this order,
though most validators will only use a subset of the available attributes.
- 
- '''4.'''
- {{{
- errors.all={0} must be at least {1}, not more than {2}, between {3} and {4} in length, and
conform to mask {5} and date pattern {6}.  Good luck!
- }}}
- 
- '''5.'''
- {{{
-             <s:commonsValidator
-                      type="allParams"
-                    server="true"
-                    client="false"
-                       max="5.7"
-                 minlength="2"
-                       min="1.2"
-                 maxlength="6"
-                      mask="[4-6].*"
-         datePatternStrict="MM/dd/yyyy" />
- }}}
- 
- Note that this will ''always'' fail because the 'isValid' method returns false.
- 
- === Required Validator ===
- 
- The 'required' validator is a special case.  The JSF framework will only call a Validator
if a value was submitted.  Usually, you would set required="true" as an attribute on the input
component.  
- 
- So that you don't have to remember to do something different for 'required', Shale allows
<s:validator type="required">, which works by setting the required attribute of the
surrounding input component to true.
- 
- The 'required' validator is defined in validator-rules.xml as:
- {{{
-       <validator name="required"
-             classname="org.apache.shale.validator.CommonsValidator"
-                method="isSupplied"
-          methodParams="java.lang.String"
-                   msg="errors.required">
-          <javascript>...</javascript>
-       </validator>        
- }}}
- 
- However, neither the 'isSupplied' method in !CommonsValidator, nor the 'errors.required'
message is ever used.
- 
- To override the message that is displayed when a required field is missing, add an entry
for "javax.faces.component.UIInput.REQUIRED" to your application's message bundle.
- 
- === References ===
- 
-  * http://struts.apache.org/struts-shale/features-commons-validator.html
-   * [http://struts.apache.org/struts-shale/shale-core/apidocs/org/apache/shale/validator/CommonsValidator.html
CommonsValidator API]
-   * [http://struts.apache.org/struts-shale/shale-core/apidocs/org/apache/shale/component/ValidatorScript.html
ValidatorScript API]
- 
-  * http://jakarta.apache.org/commons/validator/
-   * [http://jakarta.apache.org/commons/validator/api-1.2.0/org/apache/commons/validator/ValidatorResources.html
ValidatorResources API]
-   * [http://jakarta.apache.org/commons/validator/api-1.2.0/org/apache/commons/validator/GenericValidator.html
GenericValidator API]
- 
-  * David and Mike explaining about the 'required' validator on [http://marc.theaimsgroup.com/?l=struts-dev&m=113624114424542&w=2
MARC] or [http://www.mail-archive.com/dev%40struts.apache.org/msg16825.html mail-archive].
- 
- -----
- 
- === Enhancements ===
- 
-  * [http://issues.apache.org/bugzilla/show_bug.cgi?id=38042 Bug 38042] - The default validator-rules.xml
file is included in shale-core.jar (Since 1.0.1).
- 
-  * [http://issues.apache.org/bugzilla/show_bug.cgi?id=38044 Bug 38044] - The filename and
location of validator rules files are configurable (Since 1.0.1).
- 
- -----
- ''Please address questions about Shale's Commons Validator integration to the [http://struts.apache.org/mail.html
struts-user] list.'''
- 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Mime
View raw message