【问题标题】:How to validate two forms on one page in Struts 2 using validate method如何使用 validate 方法在 Struts 2 的一页上验证两个表单
【发布时间】:2013-11-23 08:55:24
【问题描述】:

我是 Struts2 的新手,我想在同一页面上验证两个表单标签:

  1. 我在顶部有一个 userIdpassword 字段,用于 Login 操作
  2. 在中心我有另一个表单标签来注册一个新用户

现在我的问题是当我申请addfielderror() 登录时,即(usernamepassword 字段)并填写注册表,因为新用户将没有userIdpassword 登录。它向当时空白的登录表单标签显示错误。那个动作是错误的,反之亦然。那么,我应该怎么做,当我登录时,它应该只检查登录操作,而当我注册它时,它应该检查注册操作?

这是我的Login 操作代码:

<s:form  method="Post" action="Login">
    <s:textfield   type="text" class=" input-small span2" name="login.Email"  placeholder="Email"></<s:textfield >
    <s:password type="password" class=" input-small span2" name="login.Pass"  placeholder="Password"></ s:password>
    <button type="submit" class="btn">Sign in</button> <br />      
</s:form>

这是注册码:

<s:form method="POST" action="Registor">
   <s:textfield class="span1" id="fname" name="FirstName" placeholder="First Name"></s:textfield>  
   <s:textfield class="span1" id="Lname" name="LastName" placeholder="Last Name"></s:textfield>  
   <s:password class="span2" id="password" placeholder="Password" name="Password"></s:password><br />       
   <s:textfield class="span2" id="email" placeholder="Email ID" name="Email_Id"></s:textfield>
   <br />
   <s:select headerKey="1" id="gender" headerValue="Select Gender" list="#@java.util.HashMap@{'Male':'Male','Female':'Female'}" name="Gender"></s:select><br />                   
   <button type="submit" id="submit" >Submit</button><br />                    
</s:form>

验证码:

public void validate() {    
  //This is for login action            
  if((login.getPassword().equals("foobar")){
    addActionMessage(SUCCESS);  
  }else{
    addFieldError("Password", "Password should be greater then 6"); 
  }                         
  //This is for registration action              
  if((user.getPassword() == null) || (user.getPassword().length() < 6)){
    addFieldError("Password", "Password should be greater then 6"); 
  }       
}  

现在,当我像这里一样输入正确的密码时,它的"foobar" 会在注册表单上的字段中显示错误

"Password should be greater then 6"

相反,它应该显示登录操作的登录成功消息。

Struts.xml:

<package name="default" extends="struts-default" >
    <action name="Login" class="org.register.customers.RegisterUserAction" method="getLogin">
        <result name="input">index.jsp</result>
        <result name="success">UserLoging.jsp</result>
        <result name="error">error.jsp</result>
    </action>
    <action name="Registor"  class="org.register.customers.RegisterUserAction" method="getRegistor">
        <result name="input">index.jsp</result>
        <result name="success">RegistorSuccess.jsp</result>
        <result name="error">index.jsp</result> 
    </action>
</package>

【问题讨论】:

  • 你能告诉我们你到目前为止做了什么吗?
  • 发布你的代码,错误会更好..

标签: java jsp validation struts2 interceptor


【解决方案1】:

据我了解,您希望将两个不同操作的验证逻辑分开,但您只有一个方法 validate() 和两个操作映射到同一操作类的方法上。

除了您进行程序化验证之外,您还应该使用validation interceptor 来执行与已执行操作相对应的validate() 方法的前缀方法调用。

假设您的操作类扩展了ActionSupport,因此您不必实现validate() 方法也不必覆盖它。然后单独写代码

 public void validateLogin() {    
   //This is for login action   
   if(login == null) {
     addActionError("Login is null"); 
   } else            
   if("foobar".equals(login.getPassword()){
     addActionMessage(SUCCESS); 
   } else {
     addFieldError("Password", "Password should be greater then 6"); 
   }   
 }   


 public void validateRegister() {
   //This is for registration action
   if(user == null) {  
     addActionError("User is null"); 
   } else            
   if(user.getPassword() == null || user.getPassword().length() < 6) {
     addFieldError("Password", "Password should be greater then 6"); 
   } 
     
 }    
               

【讨论】:

  • 嘿,谢谢你的回答,我有一些逻辑,但我应该如何调用这个方法,我应该从我的操作方法中调用这个方法,比如 Public String login(){ validateLogin() // 我的另一个逻辑返回成功}
  • 你不应该调用这些方法,validation 拦截器会在执行intercept 时调用它们,你只需要你的动作类来实现Validateable 甚至更好地扩展@987654331 @ 默认实现该接口的位置。确保拦截器被操作配置引用。 defaultStack 包含它。
  • 我在我的动作类中扩展了 ActionSupprt 但它不起作用我没有让这个验证方法起作用。能不能详细说一下,谢谢
  • 你的struts.xml 是什么?究竟是什么不工作,你期望什么,你调试了吗?这些方法被执行了吗?
  • 将文件 index.jsp 重命名为 /page.jsp 并更新配置。也不要在 cmets 中发布代码。编辑您的问题并添加详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2014-09-18
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
相关资源
最近更新 更多