|
Recipe 8.8. Validating Field Equality in Struts 1.2ProblemYou want to validate that two fields on a form have the same value, taking advantage of the new features provided by the Validator in Struts 1.2. SolutionUse the validwhen rule with a test expression that checks if the validated field is equals the other field. In Example 8-12, the test expression specifies the password2 field (*this*) must equal the password field for the validation to pass. Example 8-12. Validating field equality with validwhen<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <form-validation> <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 position="0" key="prompt.password2"/> <arg position="1" key="prompt.password"/> <msg name="validwhen" key="error.password.match"/> <var> <var-name>test</var-name> <var-value>(*this* == password)</var-value> </var> </field> </form> </formset> </form-validation> DiscussionIf you compare this Solution with Recipe 8.7, you can see the same business rule is implemented without requiring a custom Validator rule. The validwhen rule used here accepts a test expression, which it evaluates. If the expression returns true, the validation passes; otherwise, the validation fails. With validwhen, you can create expressions that reference the value of the field being validated and the value of any other property on the ActionForm. With this power in hand, creating an expression to test the equality of two fields is easy: (*this* == password) The left-hand operand, *this*, represents the value of the field under validation. The right-hand operand, password, represents the value of the password property from the RegistrationForm. See AlsoThe validwhen rule is discussed in more detail in Recipe 8.4. If you can't use validwhen because you are using Struts 1.1, Recipe 8.7 provides an alternate solution using a custom rule. |
|