Struts Validation Framework, DynaActionForm
-
Upload
duongtuanvn -
Category
Documents
-
view
240 -
download
0
Transcript of Struts Validation Framework, DynaActionForm
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 1/81
1
Struts Validation Framework,Struts Validation Framework,DynaActionFormDynaActionForm
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 2/81
2
Sang Shin
Java™ Technology EvangelistSun Microsystems, Inc.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 3/81
3
Disclaimer & Acknowledgments
● Even though Sang Shin is a full-time employee of SunMicrosystems, the content in this presentation is created as hisown personal endeavor and thus does not reflect any officialstance of Sun Microsystems.
● Sun Microsystems is not responsible for any inaccuracies in thecontents.
● Acknowledgments: – Struts' user's guide is also used in creating slides and speaker notes
– Building custom validation rule slides are borrowed from “The Validator
Framework” presentation authored by Chuck Cavaness – Some example codes are from “Jakarta Struts Cookbook” written by Bill
Siggelkow (published by O'Reilly)
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 4/81
4
Revision History
● 12/01/2003: version 1: created by Sang Shin● 04/09/2004: version 2: speaker notes are polished a bit● 09/01/2005: Struts Validation framework slides are
separated out from advanced struts● Things to do
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 5/81
5
Topics
● DynaActionForm● Validation Framework
–
How to configure and use validation framework – validations-rules.xml
– validations.xml
– How to use DynaActionForm with validation
framework – Client side validation with JavaScript
– I18N and validation
– Custom validation
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 6/81
6
DynaActionForm
(Introduced in 1.1)
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 7/817
Why DynaActionForm?
● Issues with using ActionForm – ActionForm class has to be created in Java
programming language
– For each HTML form page, a new ActionFormclass has to be created
– Every time HTML form page is modified (aproperty is added or removed), ActionForm class
has to be modified and recompiled● DynaActionForm support is added to Struts
1.1 to address these issues
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 8/818
What is DynaActionForm?● org.apache.struts.action.DynaActionForm
– extends ActionForm class
● In DynaActionForm scheme, – Properties are configured in configuration file
rather than coding
– reset() method resets all the properties back totheir initial values
– You can still subclass DynaActionForm to overridereset() and/or validate() methods
● Version exists that works with Validator framework toprovide automatic validation
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 9/819
How to Configure DynaActionForm?
● Configure the properties and their types inyour struts-config.xml file – add one or more <form-property> elements for
each <form-bean> element
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 10/8110
Example from struts-examples <form-beans>
<!-- Simple ActionForm Bean --> <form-bean name="simpleForm"type="examples.simple.SimpleActionForm"/>
<!-- DynaActionForm Bean --> <form-bean name="dynaForm"type="org.apache.struts.action.DynaActionForm">
<form-property name="name" type="java.lang.String" /> <form-property name="secret" type="java.lang.String" /> <form-property name="color" type="java.lang.String" />
<form-property name="confirm" type="java.lang.Boolean" /> <form-property name="rating" type="java.lang.String" /> <form-property name="message" type="java.lang.String" /> <form-property name="hidden" type="java.lang.String" />
</form-bean>
</form-beans>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 11/8111
Types Supported by
DynaActionForm● java.lang.BigDecimal, java.lang.BigInteger ● boolean and java.lang.Boolean● byte and java.lang.Byte● char and java.lang.Character ● java.lang.Class, double and java.lang.Double● float and java.lang.Float●
int and java.lang.Integer ● long and java.lang.Long● short and java.lang.Short● java.lang.String●
java.sql.Date, java.sql.Time, java.sql.Timestamp
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 12/81
12
Example from struts-submit
sample applicationpublic ActionForward execute(ActionMapping mapping,
ActionForm form,HttpServletRequest request,HttpServletResponse response)
throws Exception { // Retrieve the value of lastname field String lastName= (String)((DynaActionForm)form).get("lastName");
....
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 13/81
13
How to perform Validation with
DynaActionForm?● DynaActionForm does not provide default
behavior for validate() method
– You can subclass and override validate() methodbut it is not recommended
● Use Validator Framework – Use DynaValidatorForm class (instead of
DynaActionForm class) – DynaValidatorForm class extends
DynaActionForm and provides basic fieldvalidation based on an XML file
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 14/81
14
Example from strut-example
sample application <form-beans>
<!-- Logon form bean --> <form-bean name="logonForm"
type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="username"type="java.lang.String"/>
<form-property name="password"type="java.lang.String"/>
</form-bean>
<!-- Subscription form bean --> <form-bean name="subscriptionForm"type="org.apache.struts.webapp.example.SubscriptionForm"/>
</form-beans>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 15/81
15
When ValidationFramework Is Not Used(Using validate() method
of ActionForm class)
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 16/81
16
SubscriptionForm class
public final class SubscriptionForm extends ActionForm {...public String getAction() {
return (this.action);
}public void setAction(String action) {this.action = action;
}...
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {...}...}
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 17/81
17
struts-config.xml: Regular ActionForm
class (actually extension of it)<!-- ========== Form Bean Definitions === --><form-beans>
<!-- Logon form bean -->
<form-bean name="logonForm"type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="username" type="java.lang.String"/><form-property name="password" type="java.lang.String"/>
</form-bean>
<!-- Subscription form bean --><form-bean name="subscriptionForm"
type="org.apache.struts.webapp.example.SubscriptionForm"/>
</form-beans>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 18/81
18
Validation Framework(added to Struts 1.1 Core)
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 19/81
19
Why Struts Validation
Framework?● Issues with writing validate() method in
ActionForm classes – You have to write validate() method for each
ActionForm class, which results in redundant code
– Changing validation logic requires recompiling
● Struts validation framework addresses
these issues – Validation logic is configured using built-in
validation rules as opposed to writing it in Javacode
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 20/81
20
What is Struts Validation
Framework?● Originated from “generic” Validator
framework from Jakarta●
Struts 1.1 includes it by default – Allows declarative validation for many fields
– Formats● Dates, Numbers, Email, Credit Card, Postal Codes
– Lengths● Minimum, maximum
– Ranges
– Regular expressions
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 21/81
21
Validation Rules
● Rules are tied to specific fields in a form● Basic Validation Rules are built-in in the
Struts 1.1 core distribution – e.g. “required”, “minLength”, “maxLength”, etc.
● The built-in validation rules come withJavascript that allows you to do client side
validation● Custom Validation rules can be created and
added to the definition file. – Can also define regular expressions
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 22/81
22
Validation Framework:
How toconfigure and useValidation framework?
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 23/81
23
Things to do in order to use
Validator framework● Configure Validator Plug-in● Configure validation.xml file (and validation-
rules.xml file)● Extend Validator ActionForms or Dynamic
ActionForms●
Set validate=”true” on Action Mappings● Include the <html:javascript> tag for client
side validation in the form's JSP page
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 24/81
24
How to Configure Validator Plug-
in● Validator Plug-in should be configured in
the Struts configuration file –
Just add the following <plug-in> element
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"><set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/></plug-in>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 25/81
25
Two Validator Configuration Files
● validation-rules.xml – Contains global set of validation rules
–
Provided by Struts framework● validation.xml
– Application specific
– Provided by application developer
– It specifies which validation rules from validation-rules.xml file are used by a particular ActionForm
– No need to write validate() code in ActionFormclass
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 26/81
26
Validation Framework:validation-rules.xml
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 27/81
27
Built-in Validation Rules
● required● requiredif
– deprecated in Struts 1.2
– use validwhen instead
● validwhen – available from Struts 1.2
– relies on user-specified test expression that includereferences to other fields, field values, and localrelationships
● minlength● maxlength
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 28/81
28
Built-in Validation Rules
● mask – uses regular expression
● byte, short, integer, long, float, double● date, range (deprecated in Struts 1.2),
intRange, floatRange● creditCard, email, url
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 29/81
29
validation-rules.xml: Built-in
“required” validation rule<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">
<javascript><![CDATA[function validateRequired(form) {
var isValid = true;...
</javascript>
</validator>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 30/81
30
validation-rules.xml: Built-in
“minlength” validation rule <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.ActionErrors,javax.servlet.http.HttpServletRequest"
depends=""msg="errors.minlength">
<javascript><![CDATA[function validateMinLength(form) {
var isValid = true;var focusField = null;...
</javascript>
</validator>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 31/81
31
Attributes of <validator ...>
Element● name: logical name of the validation rule● classname, method: class and method that
contains the validation logic● methodParams: comma-delimited list of
parameters for the method● msg: key from the resource bundle
– Validator framework uses this to look up a messagefrom Struts resource bundle
● depends: other validation rules that shouldbe called first
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 32/81
32
Built-in Error Messages From Validator
Framework# Built-in error messages for validator framework checks# You have to add the following to your application's resource bundleerrors.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.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 33/81
33
Validation Framework:validation.xml
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 34/81
34
validation.xml: logonForm (from
struts-examples sample code)<form-validation>
<!-- ========== Default Language Form Definitions ===================== --><formset>
<form name="logonForm">
<field property="username"depends="required, minlength,maxlength">
<arg0 key="prompt.username"/><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>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 35/81
35
validation.xml: logonForm (from
struts-examples sample code) <field property="password"depends="required, minlength,maxlength"bundle="alternate">
<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>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 36/81
36
validation.xml: registrationForm (from
struts-examples sample code) <form name="registrationForm">
<field property="fromAddress"depends="required,email">
<arg0 key="prompt.fromAddress"/></field>
<field property="fullName"depends="required">
<arg0 key="prompt.fullName"/></field><field property="replyToAddress"
depends="email"><arg0 key="prompt.replyToAddress"/>
</field><field property="username"
depends="required"><arg0 key="prompt.username"/>
</field>
</form>
</formset>-
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 37/81
37
<form ...> Element
● Defines a set of fields to be validated – <!ELEMENT form (field+)>
● Attributes – Name attribute: Corresponds name attribute of
<form-bean> in struts-config.xml
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 38/81
38
struts-config.xml: logonForm (from
struts-examples sample code) <form-beans>
<!-- Logon form bean --><form-bean name="logonForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="username" type="java.lang.String"/><form-property name="password" type="java.lang.String"/></form-bean>
<!-- Subscription form bean --><form-bean name="subscriptionForm"
type="org.apache.struts.webapp.example.SubscriptionForm"/>
</form-beans>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 39/81
39
<field ...> Element
● Corresponds to a property in an ActionForm – <!ELEMENT field (msg?, arg0?, arg1?, arg2?,
arg3?, var*)>
● Attributes – property: name of a property (in an ActionForm) that
is to be validated
– depends: comma-delimited list of validation rules to
apply against this field● All validation rules have to succeed
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 40/81
40
<field ...> Element: <msg ...> child
element● Allows you to specify an alternate message
for a field element●
<msg name=”..” key=”...” resource=”...”/> – name: specifies rule with which the msg is used, should
be one of the rules in validation-rules.xml
– key: specifies key from the resource bundle that shouldbe added to the ActionError if validation fails
– resource: if set to false, the value of key is taken asliteral string
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 41/81
41
<field ...> Element: <arg0 ...> child
element● <arg0 key=”..” name=”..” resource=”..”>
– Are used to pass additional values to the message
– <arg0> is the 1st
replacement and <arg1> is the 2nd
replacement, and so on
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 42/81
42
<field ...> Element: <var ...> child
element<var>
<var-name>...</var-name><var-value>...</var-value>
</var>● Set parameters that a field element may
need to pass to one of its validation rules
such as minimum and miximum values in arange validation● Referenced by <argx> elements using
${var:var-name} syntax
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 43/81
43
Validation Framework:
How do you useActionForm with
Validator?
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 44/81
44
ActionForm and Validator ● You cannot use ActionForm class with the
Validator – Instead you need to use special subclasses of
ActionForm class
● Validator supports two types specialActionForms – Standard ActionForms
●
ValidatorActionForm● ValidatorForm
– Dynamic ActionForms● DynaValidatorActionForm
●
DynaValidatorForm
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 45/81
45
Choices You have
● Standard ActionForms or DynamicActionForms? (rehash) – If you want to specify ActionForms declaratively,
use dynamic ActionForms
● xValidatorActionForm or xValidatorForm? – Use xValidatorActionForm if you want more fine-
grained control over which validation rules areexecuted
– In general, xValidatorForm should be sufficient
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 46/81
46
Validation Framework:struts-exampleSample code
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 47/81
47
struts-config.xml:
DynaValidatorForm<!-- ========== Form Bean Definitions === --><form-beans>
<!-- Logon form bean --><form-bean name="logonForm"
type="org.apache.struts.validator.DynaValidatorForm"><form-property name="username" type="java.lang.String"/><form-property name="password" type="java.lang.String"/>
</form-bean>
<!-- Subscription form bean --><form-bean name="subscriptionForm"
type="org.apache.struts.webapp.example.SubscriptionForm"/>
</form-beans>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 48/81
48
validation-rules.xml: Built-in
“required” validation rule<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">
<javascript><![CDATA[function validateRequired(form) {
var isValid = true;...
</javascript>
</validator>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 49/81
49
validation-rules.xml: Built-in
“minlength” validation rule <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.ActionErrors,javax.servlet.http.HttpServletRequest"
depends=""msg="errors.minlength">
<javascript><![CDATA[function validateMinLength(form) {
var isValid = true;var focusField = null;...
</javascript>
</validator>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 50/81
50
validation.xml: logonForm<form-validation>
<!-- ========== Default Language Form Definitions ===================== --><formset>
<form name="logonForm">
<field property="username" depends="required, minlength,maxlength">
<arg0 key="prompt.username"/><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>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 51/81
51
ApplicationResources.Properties
# Standard error messages for validator framework checkserrors.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.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 52/81
52
LogonForm Validation: “required”
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 53/81
53
LogonForm Validation: “minlength”
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 54/81
54
LogonForm Validation: “maxlength”
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 55/81
55
Validation Framework:Examples
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 56/81
56
Validating SSC field with “mask”
validator <form name="ValidationTestForm">
<field property="ssn"
depends="required,mask">
<arg key="prompt.ssn"/>
<var>
<var-name>mask</var-name>
<var-value>^\d{3}-\d{2}-\d{4}$</var-value>
<!--<var-value>^[0-9]{3}-[0-9]{2}-[0-9]{4}$</var-value>-->
</var></field>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 57/81
57
Validating zipCode field with
“validwhen” validator <field property="zipCode" depends="validwhen">
<arg key="prompt.zipCode"/>
<var>
<var-name>test</var-name>
<var-value>
(((city != null) and (state != null)) or (*this* != null))
</var-value>
</var>
</field>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 58/81
58
Validating Field Equality in Struts
1.2 using “validwhen”<formset><form name="RegistrationForm">
<field property="emailAddress"depends="required,email">
<arg key="prompt.emailAddress"/>
</field><field property="password"
depends="required"><arg key="prompt.password"/>
</field>
<field property="password2" depends="required,validwhen">
<arg key="prompt.password2"/><msg name="validwhen" key="error.password.match"/><var>
<var-name>test</var-name><var-value>(*this* == password)</var-value>
</var></field>
</form>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 59/81
59
Validation Framework:
How to performClient-side Validationusing JavaScript?
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 60/81
60
JavaScript Support in Validator
Framework● The Validator framework is also capable of
generating JavaScript for your Strutsapplication using the same framework as for server-side validation – By using a set of JSP custom tags designed
specifically for this purpose
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 61/81
61
Configuring validation-rules.xml
for JavaScript● A custom tag is used to generate client-side
validation based on a javascript attributebeing present within the <validator> elementin the validation-rules.xml file
● Use the custom tag in your JSP page – The text from <javascript> element is written to the
JSP page to provide client-side validation
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 62/81
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 63/81
63
Validation Rules for the
logonForm in validation.xml
<form name="logonForm">
<field property="username"depends="required, minlength,maxlength">
<arg0 key="prompt.username"/><arg1 key="${var:minlength}" name="minlength"
resource="false"/><arg2 key="${var:maxlength}" name="maxlength"
resource="false"/>...
</field>
<field property="password"depends="required, minlength,maxlength"bundle="alternate">
...
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 64/81
64
Things You Have to Do in your JSP
Page● You will need to include the
<html:javascript> tag with the name of theActionForm that it's going to validate against
● The formName attribute is used to look upthe set of validation rules to include asJavaScript in the page
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 65/81
65
logon.jsp Page (from struts-
example sample code)
<html:javascript formName="logonForm"dynamicJavascript="true"staticJavascript="false"/>
<script language="Javascript1.1" src="staticJavascript.jsp"></script>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 66/81
66
Things You Have to Do in your JSP
Page● You will have to add an onsubmit event
handler for the form manually●
When the form is submitted, thevalidateLogonForm( ) JavaScript function willbe invoked – The validation rules will be executed, and if one or
more rules fail, the form will not be submitted.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 67/81
67
Things You Have to Do in your JSP
Page● The <html:javascript> tag generates a
function with the name validateXXX( ) ,where XXX is the name of the ActionForm – Thus, if your ActionForm is called logonForm, the
javascript tag will create a JavaScript function calledvalidateLogonForm( ) that executes the validationlogic
– This is why the onsubmit( ) event handler called thevalidateLogonForm( ) function.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 68/81
68
logon.jsp Page (from struts-
example sample code)
<html:form action="/logon" focus="username" onsubmit="return validateLogonForm(this);"><table border="0" width="100%">
<tr><th align="right"><bean:message key="prompt.username"/>:
</th><td align="left"><html:text property="username" size="16"
maxlength="18"/></td>
</tr>...</html>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 69/81
69
Validation Framework:I18N and
Validation
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 70/81
70
I18N and Validator ● Validator framework uses Struts resource
bundle● <formset> element in validation.xml supports
language, country, variant<formset>
...
</formset>
<formset language=”fr”>
...
</formset>
<formset language=”fr” country=”CA”>
...
</formset>
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 71/81
71
Validation Framework:Advanced Features
of Validator
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 72/81
72
Advanced Features
● Creating custom validation rules● Using programmatic validation along with
Validator
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 73/81
73
Creating Custom Validation Rules● Create a new validation method● Modify the validation-rules.xml file to rules. xml
contain the new validation method
● Modify the validation.xml file to use the newvalidation rule rule.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 74/81
74
Creating Custom Validation Rules● Create a new validation method● Modify the validation-rules.xml file to rules. xml
contain the new validation method
● Modify the validation.xml file to use the newvalidation rule rule.
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 75/81
75
Create a new validation methodpublic static boolean validateExactLength( Object bean, ValidatorAction va, Field
field, ActionErrors errors, HttpServletRequest request) {String value = null;if (isString( bean)) {
value = (String) bean;} else {
value = ValidatorUtil. getValueAsString( bean, field. getProperty());
}String exactLength = field. getVarValue(" exactlength");if (! GenericValidator. isBlankOrNull( value)) {
try {int length = Integer. parseInt( exactLength);if ( value. length() != length ) {
errors. add( field. getKey(), Resources. getActionError( request, va, field));
return false;}
} catch (Exception e) {errors. add( field. getKey(), Resources. getActionError( request, va, field));return false;
}}
return true;}
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 76/81
76
Modify validation.xml<form name=" checkoutForm"><fieldproperty=" shippingAddress"depends=" exactLength"><arg0 key=" label. address"/><arg1 name=" exactLength" key="${ var: exactlength}" resource="
false"/><var><var- name> exactlength</ var- name><var- value> 10</ var- value></ var></ field><field
property=" shippingCity"depends=" required, mask"><arg0 key=" label. city"/><var><var- name> mask</ var- name><var- value>^[ a- zA- Z]*$</ var- value></ var>
</ field>…
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 77/81
77
Best Practice
Guidelines
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 78/81
78
Best Practice Guidelines
● Separate validation XML configuration filesfor each major functional areas of your application
● Configure them in a similar manner in whichmultiple Struts configuration files areconfigured
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 79/81
79
Advaced ValidationTechniques(From Struts Cookbook
written by Bill Siggelkow)
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 80/81
80
Advanced ValidationTechniques
Described in Struts Cookbook● Validating an indexed property (chap. 8.5)● Validating dates (chap. 8.6)● Validating two or more choices (chap. 8.9)● Adding a custom validation to a Validator form
(chap. 8.10)● Validating a Wizard form (chap. 8.11)
8/14/2019 Struts Validation Framework, DynaActionForm
http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 81/81
Passion!