hello. I'm trying to register a user but what i'm testing is validations. The problem i have is the password comparison. When i want to compare the two password fields everything gets messed-up (and it also calls an actionclass even though it's client side validation). Please see the screen shots i have added at the end of the letter. I think anything else is pretty clear from the screenshots.
Source code follows RegisterLogUserAction-validation.xml ============================ <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="user.firstname"> <field-validator type="requiredstring"> <message>You must enter your first name.</message> </field-validator> </field> <field name="user.lastname"> <field-validator type="requiredstring"> <message>You must enter your last name.</message> </field-validator> </field> <field name="user.email"> <field-validator type="requiredstring"> <message>You cannot leave the email address field empty.</message> </field-validator> <field-validator type="email"> <message>The email address you entered is not valid.</message> </field-validator> </field> <field name="pass"> <field-validator type="requiredstring"> <message>You must enter a password.</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">5</param> <message>Password must contain at least ${minLength} characters.</message> </field-validator> </field> <field name="passconfirm"> <field-validator type="fieldexpression"> <param name="expression">pass==passconfrim</param> <message>Password does not match.</message> </field-validator> </field> </validators> RegisterLogUserAction ================= import org.apache.struts2.interceptor.validation.SkipValidation; import net.translators.logic.User; public class RegisterLogUserAction extends UsersAction { //Has a static HashMap of the users private static final long serialVersionUID = -6928389480267873645L; private String message; private User user; private String pass; private String passconfirm; public void validate(){ setMessage("Has gone through validate()"); } public String execute(){ message+=". Has gone though execute()."; return SUCCESS; } //@SkipValidation public String serverside(){ message+=". Has gone though serverside()."; return SUCCESS; } public String clientside(){ message+=". Has gone though clientside()."; return SUCCESS; } public void setMessage(String message) { this.message = message; } public String getMessage() { return message; } public void setUser(User user) { this.user = user; } public User getUser() { return user; } public void setPass(String pass) { this.pass = pass; } public String getPass() { return pass; } public void setPassconfirm(String passconfirm) { this.passconfirm = passconfirm; } public String getPassconfirm() { return passconfirm; } } UserAction ================ public class UsersAction extends ActionSupport { private static final long serialVersionUID = 7196692210557957242L; private static Map<String, User> users = new HashMap<String, User>(); public String register(){ return INPUT; } } index.jsp ============ <body> <p> This is the default home page. Here you will see news feeds etc.</p> <p>You can register (client side validation)</p> <s:form action="register-user1" method="POST" validate="true" > <s:textfield key="user.firstname" /> <s:textfield key="user.lastname" /> <s:textfield key="user.email" /> <s:password key="pass" /> <s:password key="passconfirm" /> <s:submit /> </s:form> <p>You can register (server side validation)</p> <s:form action="register-user2" method="POST" > <s:textfield key="user.firstname" /> <s:textfield key="user.lastname" /> <s:textfield key="user.email" /> <s:password key="pass" /> <s:password key="passconfirm" /> <s:submit /> </s:form> <!-- .... --> </body> struts.xml ================= <action name="register-user1" class="net.translators.actions.users.RegisterLogUserAction" method="clientside"> <result name="success">/tests/message.jsp</result> <result name="input">/index.jsp</result> </action> <action name="register-user2" class="net.translators.actions.users.RegisterLogUserAction" method="serverside"> <result name="success">/tests/message.jsp</result> <result name="input">/index.jsp</result> </action> IndexAction.properties ==================== user.firstname = First Name user.lastname = Last Name user.email = E-mail pass = Password passconfirm = Password confirmation IndexAction.java ==================== public class IndexAction extends ActionSupport { public String execute(){ return SUCCESS; } } Screenshots http://dl.dropbox.com/u/13391208/Screenshot1.png http://dl.dropbox.com/u/13391208/Screenshot2.png http://dl.dropbox.com/u/13391208/Screenshot3.png