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

Reply via email to