validator-rules.xml
). So yesterday, I did some tinkering and figured out how to add the JavaScript method to
validator-rules.xml
. So here's how to configure the whole thing (most of this is contained in the Validator Guide, save the JavaScript).
How To Add a TwoFields Validator
Step 1: Create a class with a
validateTwoFields
method. In my code, my class is
ValidationUtil
and has the following method:
public static boolean validateTwoFields(Object bean, ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request) { String value = ValidatorUtil.getValueAsString(bean, field.getProperty()); String sProperty2 = field.getVarValue("secondProperty"); String value2 = ValidatorUtil.getValueAsString(bean, sProperty2); if (!GenericValidator.isBlankOrNull(value)) { try { if (!value.equals(value2)) { 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; }
Step 2: Edit validator-rules.xml
to contain the "twofields" rule.
<validator name="twofields" classname="org.appfuse.webapp.util.ValidationUtil" method="validateTwoFields" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest" depends="required" msg="errors.twofields"> <javascript><![CDATA[ function validateTwoFields(form) { var bValid = true; var focusField = null; var i = 0; var fields = new Array(); oTwoFields = new twofields(); for (x in oTwoFields) { var field = form[oTwoFields[x][0]]; var secondField = form[oTwoFields[x][2]("secondProperty")]; if (field.type == 'text' || field.type == 'textarea' || field.type == 'select-one' || field.type == 'radio' || field.type == 'password') { var value; var secondValue; // get field's value if (field.type == "select-one") { var si = field.selectedIndex; value = field.options[si].value; secondValue = secondField.options[si].value; } else { value = field.value; secondValue = secondField.value; } if (value != secondValue) { if (i == 0) { focusField = field; } fields[i++] = oTwoFields[x][1]; bValid = false; } } } if (fields.length > 0) { focusField.focus(); alert(fields.join('/n')); } return bValid; }]]></javascript> </validator>
Step 3: Configure validation for your form in validation.xml
:
<field property="password" depends="required,twofields"> <msg name="required" key="errors.required"/> <msg name="twofields" key="errors.twofields"/> <arg0 key="userForm.password"/> <arg1 key="userForm.confirmPassword" /> <var> <var-name>secondProperty</var-name> <var-value>confirmPassword</var-value> </var> </field>
Where errors.twofields=The '{0}' field has to have the same value as the '{1}' field. An alternative to Step 3 is to use XDoclet to generate your validation.xml
. This requires (1) configuring XDoclet (of course) and (2) adding some @struts
tags to your form on the setPassword
method.
/** * Returns the password. * @return String * * @struts.validator type="required" msgkey="errors.required" * @struts.validator type="twofields" msgkey="errors.twofields" * @struts.validator-args arg1resource="userForm.password" * @struts.validator-args arg1resource="userForm.confirmPassword" * @struts.validator-var name="secondProperty" value="confirmPassword" */ public String setPassword() { return password; }
I've sent this as a proposal to the struts-dev mailing list yesterday, but haven't heard anything yet. Enjoy!
Update: You'll need to update ValidationUtil.java and validator-rules-custom.xml for Struts 1.2. Full files: ValidationUtil.java and validation-rules-custom.xml. February 26, 2003 12:29 PM MST Permalink
Moblogger works with Roller! Category: Roller
I did some testing with Russ's Moblogger this morning and it works great with Roller! I haven't tested attaching images, but sending a plain text message worked like a charm. The hardest part was setting up the e-mail address. I'll try to document my setup procedures tonight for other Roller users.
Hopefully, I'll be setting this up on this site so I can post with my T68i. What does that give me? Nothing, absolutely nothing - simply the ability to post 1 liners or something like that. Of course, I could also be motivated to get the phone's camera - that might make it a little more worthwhile. Good excuse for new gadget. I dig the software/idea - thanks Russ!
转载自Raible Designs