All, Using the example from Dave's web-site, I've coded up the following custom validation in order to compare two password fields. I've included my struts-config, my application-rules.xml, and the java source. I'm missing something because I am getting a java.lang.NoSuchMethodException: comparePasswords, but I can't figure out why. Looking through Tomcat's console log I can see where Validator has added the method. Any ideas on what I am missing?
struts-config.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="UserLoginForm" type="org.apache.struts.validator.DynaValidatorActionForm"> <form-property name="userID" type="java.lang.String" /> <form-property name="currentPassword" type="java.lang.String" /> <form-property name="newPassword" type="java.lang.String" /> <form-property name="confirmPassword" type="java.lang.String" /> </form-bean> <form-bean name="RequestAccessForm" type="org.apache.struts.validator.DynaValidatorActionForm"> </form-bean> </form-beans> <global-forwards> <forward name="changepassword" path="/changepassword.as" /> <forward name="login" path="/login.as" /> <forward name="menu" path="/menu.as" /> <forward name="privacystatement" path="/privacystatement.as" /> <forward name="requestaccess" path="/requestaccess.as" /> <forward name="resetpassword" path="/resetpassword.as" /> </global-forwards> <action-mappings> <action path="/changepassword" type="com.labone.struts.framework.extensions.TilesForward"> <forward name="success" path="changepassword" /> </action> <action path="/login" type="com.labone.struts.framework.extensions.TilesForward"> <forward name="success" path="login" /> </action> <action path="/menu" type="com.labone.struts.framework.extensions.TilesForward"> <forward name="success" path="menu" /> </action> <action path="/privacystatement" type="com.labone.struts.framework.extensions.TilesForward"> <forward name="success" path="privacystatement" /> </action> <action path="/requestaccess" type="com.labone.struts.framework.extensions.TilesForward"> <forward name="success" path="requestaccess" /> </action> <action path="/resetpassword" type="com.labone.struts.framework.extensions.TilesForward"> <forward name="success" path="resetpassword" /> </action> <action path="/ChangePasswordAction" type="com.labone.membersolutions.ActionObjects.ChangePasswordAction" name="UserLoginForm" scope="request" input="changepassword"> <forward name="success" path="menu" /> </action> <action path="/LoginAction" type="com.labone.membersolutions.ActionObjects.LoginAction" name="UserLoginForm" scope="request" input="login"> <forward name="success" path="menu" /> </action> <action path="/RequestAccessAction" type="com.labone.membersolutions.ActionObjects.RequestAccessAction" name="RequestAccessForm" scope="request" input="requestaccess"> <forward name="success" path="login" /> </action> <action path="/ResetPasswordAction" type="com.labone.membersolutions.ActionObjects.ResetPasswordAction" name="UserLoginForm" scope="request" input="resetpassword"> <forward name="success" path="login" /> </action> </action-mappings> <message-resources parameter="com.labone.membersolutions.i18n.ApplicationResources" /> <plug-in className="org.apache.struts.tiles.TilesPlugin"> <set-property property="definitions-config" value="/WEB-INF/xml/tiles-config.xml" /> <set-property property="definitions-debug" value="0" /> <set-property property="definitions-parser-details" value="0" /> <set-property property="definitions-parser-validate" value="true" /> </plug-in> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/xml/validator-rules.xml, /WEB-INF/xml/application-rules.xml" /> </plug-in> </struts-config> application-rules.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!--DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Struts Validator Rules Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/validator-rules_1_1.dtd"--> <form-validation> <global> <validator name="comparePasswords" classname="com.labone.struts.framework.extensions.Validator" method="comparePasswords" msg="errors.comparepasswords" /> </global> <formset> <form name="/ChangePasswordAction"> <field property="currentPassword" depends="required,comparePasswords"> <arg0 key="ChangePasswordForm.currentPassword.displayname" /> <arg1 key="ChangePasswordForm.newPassword.displayname" /> <arg2 key="cannot" /> <var> <var-name>password2</var-name> <var-value>newPassword</var-value> </var> </field> <field property="newPassword" depends="required,comparePasswords"> <arg0 key="ChangePasswordForm.newPassword.displayname" /> <arg1 key="ChangePasswordForm.confirmPassword.displayname" /> <arg2 key="must" /> <var> <var-name>password2</var-name> <var-value>confirmPassword</var-value> </var> </field> <field property="confirmPassword" depends="required"> <arg0 key="ChangePasswordForm.confirmPassword.displayname" /> </field> </form> <form name="/LoginAction"> <field property="userID" depends="required, email"> <arg0 key="LoginForm.userID.displayname" /> </field> <field property="currentPassword" depends="required"> <arg0 key="LoginForm.password.displayname" /> </field> </form> <form name="/RequestAccessAction"> </form> <form name="/ResetPasswordAction"> <field property="userID" depends="required, email" > <arg0 key="ResetPasswordForm.userID.displayname" /> </field> </form> </formset> </form-validation> java-source package com.labone.struts.framework.extensions; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.commons.validator.Field; import org.apache.commons.validator.GenericValidator; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.ValidatorUtil; import org.apache.struts.action.ActionErrors; import org.apache.struts.util.StrutsValidatorUtil; public class Validator { public static boolean comparePasswords(Object object, ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request, ServletContext context) { String password = ValidatorUtil.getValueAsString(object, field.getProperty()); String sPassword = field.getVarValue("password2"); String password2 = ValidatorUtil.getValueAsString(object, sPassword); if (!GenericValidator.isBlankOrNull(password)) { try { if (!password.equalsIgnoreCase(password2)) { errors.add(field.getKey(), StrutsValidatorUtil.getActionError(request, va, field)); return false; } } catch(Exception e) { errors.add(field.getKey(), StrutsValidatorUtil.getActionError(request, va, field)); return false; } } return true; } } Jerry Jalenak Web Publishing LabOne, Inc. 10101 Renner Blvd. Lenexa, KS 66219 (913) 577-1496 [EMAIL PROTECTED] This transmission (and any information attached to it) may be confidential and is intended solely for the use of the individual or entity to which it is addressed. If you are not the intended recipient or the person responsible for delivering the transmission to the intended recipient, be advised that you have received this transmission in error and that any use, dissemination, forwarding, printing, or copying of this information is strictly prohibited. If you have received this transmission in error, please immediately notify LabOne at (800)388-4675. -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>