81
1 Struts Validation Framework, Struts Validation Framework, DynaActionForm DynaActionForm

Struts Validation Framework, DynaActionForm

Embed Size (px)

Citation preview

Page 1: 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

Page 2: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 2/81

2

Sang Shin

[email protected]

Java™ Technology EvangelistSun Microsystems, Inc.

Page 3: Struts Validation Framework, DynaActionForm

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)

Page 4: Struts Validation Framework, DynaActionForm

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

Page 5: Struts Validation Framework, DynaActionForm

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

Page 6: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 6/81

6

DynaActionForm

(Introduced in 1.1)

Page 7: Struts Validation Framework, DynaActionForm

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

Page 8: Struts Validation Framework, DynaActionForm

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

Page 9: Struts Validation Framework, DynaActionForm

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

Page 10: Struts Validation Framework, DynaActionForm

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> 

Page 11: Struts Validation Framework, DynaActionForm

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

Page 12: Struts Validation Framework, DynaActionForm

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");

....

Page 13: Struts Validation Framework, DynaActionForm

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

Page 14: Struts Validation Framework, DynaActionForm

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> 

Page 15: Struts Validation Framework, DynaActionForm

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)

Page 16: Struts Validation Framework, DynaActionForm

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) {...}...}

Page 17: Struts Validation Framework, DynaActionForm

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>

Page 18: Struts Validation Framework, DynaActionForm

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)

Page 19: Struts Validation Framework, DynaActionForm

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

Page 20: Struts Validation Framework, DynaActionForm

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

Page 21: Struts Validation Framework, DynaActionForm

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

Page 22: Struts Validation Framework, DynaActionForm

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?

Page 23: Struts Validation Framework, DynaActionForm

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

Page 24: Struts Validation Framework, DynaActionForm

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>

Page 25: Struts Validation Framework, DynaActionForm

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

Page 26: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 26/81

26

Validation Framework:validation-rules.xml

Page 27: Struts Validation Framework, DynaActionForm

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

Page 28: Struts Validation Framework, DynaActionForm

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

Page 29: Struts Validation Framework, DynaActionForm

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>

Page 30: Struts Validation Framework, DynaActionForm

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>

 

Page 31: Struts Validation Framework, DynaActionForm

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

Page 32: Struts Validation Framework, DynaActionForm

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.

Page 33: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 33/81

33

Validation Framework:validation.xml

Page 34: Struts Validation Framework, DynaActionForm

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>

Page 35: Struts Validation Framework, DynaActionForm

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>

Page 36: Struts Validation Framework, DynaActionForm

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>-

Page 37: Struts Validation Framework, DynaActionForm

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

Page 38: Struts Validation Framework, DynaActionForm

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>

Page 39: Struts Validation Framework, DynaActionForm

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

Page 40: Struts Validation Framework, DynaActionForm

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

Page 41: Struts Validation Framework, DynaActionForm

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

Page 42: Struts Validation Framework, DynaActionForm

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

Page 43: Struts Validation Framework, DynaActionForm

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?

Page 44: Struts Validation Framework, DynaActionForm

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

Page 45: Struts Validation Framework, DynaActionForm

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

Page 46: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 46/81

46

Validation Framework:struts-exampleSample code

Page 47: Struts Validation Framework, DynaActionForm

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>

Page 48: Struts Validation Framework, DynaActionForm

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>

Page 49: Struts Validation Framework, DynaActionForm

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>

 

Page 50: Struts Validation Framework, DynaActionForm

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>

Page 51: Struts Validation Framework, DynaActionForm

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.

Page 52: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 52/81

52

LogonForm Validation: “required”

Page 53: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 53/81

53

LogonForm Validation: “minlength”

Page 54: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 54/81

54

LogonForm Validation: “maxlength”

Page 55: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 55/81

55

Validation Framework:Examples

Page 56: Struts Validation Framework, DynaActionForm

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>

Page 57: Struts Validation Framework, DynaActionForm

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>

Page 58: Struts Validation Framework, DynaActionForm

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>

Page 59: Struts Validation Framework, DynaActionForm

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?

Page 60: Struts Validation Framework, DynaActionForm

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

Page 61: Struts Validation Framework, DynaActionForm

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

Page 62: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 62/81

Page 63: Struts Validation Framework, DynaActionForm

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">

...

Page 64: Struts Validation Framework, DynaActionForm

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

Page 65: Struts Validation Framework, DynaActionForm

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>

Page 66: Struts Validation Framework, DynaActionForm

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.

Page 67: Struts Validation Framework, DynaActionForm

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.

Page 68: Struts Validation Framework, DynaActionForm

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>

Page 69: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 69/81

69

Validation Framework:I18N and

Validation

Page 70: Struts Validation Framework, DynaActionForm

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>

Page 71: Struts Validation Framework, DynaActionForm

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 

Page 72: Struts Validation Framework, DynaActionForm

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 

Page 73: Struts Validation Framework, DynaActionForm

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.

Page 74: Struts Validation Framework, DynaActionForm

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.

Page 75: Struts Validation Framework, DynaActionForm

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;}

Page 76: Struts Validation Framework, DynaActionForm

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>…

Page 77: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 77/81

77

 Best Practice

Guidelines

Page 78: Struts Validation Framework, DynaActionForm

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

Page 79: Struts Validation Framework, DynaActionForm

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)

Page 80: Struts Validation Framework, DynaActionForm

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)

Page 81: Struts Validation Framework, DynaActionForm

8/14/2019 Struts Validation Framework, DynaActionForm

http://slidepdf.com/reader/full/struts-validation-framework-dynaactionform 81/81

  Passion!