You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by alex zaim <ic...@yahoo.com> on 2011/04/12 17:10:27 UTC

Password comparison has a strange behavior.please help(struts2)

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

Re: Password comparison has a strange behavior.please help(struts2)

Posted by Dave Newton <da...@gmail.com>.
Interesting.

My first comment would be that client side validation doesn't support
expression validations; only the following are supported as per [1].

* required validator
* requiredstring validator
* stringlength validator
* regex validator
* email validator
* url validator
* int validator
* double validator

Doesn't explain the behavior (although IIRC there were some changes
made to the JS recently?) but I'd start by assuming you can't do what
you're trying to do.

Dave

[1] http://struts.apache.org/2.x/docs/pure-javascript-client-side-validation.html


On Tue, Apr 12, 2011 at 11:10 AM, alex zaim <ic...@yahoo.com> wrote:
> 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

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org