Struts 2在第一页加载时跳过验证

时间:2012-10-24 08:34:29

标签: validation struts2

我有一个表单,我需要在提交时进行验证。我已将public void validate()添加到我的操作类中。但是,当表单尚未提交时,即使在初始页面加载时也会显示错误。

我已阅读thisthis,但没有解决我的问题。实现诸如在第一次表单加载时跳过验证这样简单的事情真的很难吗? :(

我在动作类中使用手动验证。

struts.xml中

<action name="login" class="community.action.LoginAction">
    <result name="success" type="redirect">/forums/list</result>
    <result name="login">/WEB-INF/login.jsp</result>
    <result name="input">/WEB-INF/login.jsp</result>
</action>

LoginAction.java

public void validate() {
    //validation rule
    addActionError("Error message");
}

public String execute() {
    if (//username and password correct) {
        return SUCCESS; //redirect to forums page
    } else {
        return LOGIN;
    }
}

目前,即使未提交表单,也会显示错误。

我尝试在@SkipValidation上使用execute()注释,但这可以防止错误显示,即使在表单提交后也是如此。

3 个答案:

答案 0 :(得分:6)

您可以在LoginAction类中再使用一个方法,使用 @SkipValidation

返回输入的login.jsp

LoginAction.java

     public String execute()
        {       
             if (//username and password correct) {
               return SUCCESS; //redirect to forums page
             } else {
             return LOGIN;
              }     
        }

    public void validate()
     {
             //validation rule
              addActionError("Error message");
     }


    @SkipValidation
    public String loginForm()
     {
            return INPUT;
     }

现在只在execute方法上进行验证。首先请求应该登录到loginForm方法。要在配置中稍作修改

<强> struts.xml中

<action name="login_*" class="community.action.LoginAction"  method="{1}">
    <result name="success" type="redirect">/forums/list</result>
    <result name="login">/WEB-INF/login.jsp</result>
    <result name="input">/WEB-INF/login.jsp</result> </action>

这里,action元素中的method =“{1}”条目将用于检查请求的方法,如果请求中没有指定任何内容,则将调用execute()方法,否则将调用提到的方法。请注意,操作名称已更改为login _ *

在JSP中提及方法名称:


  -------
  <s:submit name="SubmitButton" value="Click To Login" action="login_loginForm"/>


在提交UI元素中,上面的操作已被提及为login_loginForm。这里login_引用动作名称,loginForm引用要调用的方法。希望这会有所帮助

答案 1 :(得分:2)

您需要使用不同的操作名称。一个用于查看表单,另一个用于提交。

答案 2 :(得分:1)

这意味着,我已在第一页加载期间调用了该操作。解决此问题的最简单方法是将您的操作从login重命名为loginAction或其他内容。