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

Ele*_*ist 4 validation struts2

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

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

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

在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>
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Mur*_*esh 6

您可以在LoginAction类中再使用一个方法来返回带有@SkipValidation的Input的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;
     }
Run Code Online (Sandbox Code Playgroud)

现在验证将仅在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>
Run Code Online (Sandbox Code Playgroud)

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

提到JSP中的方法名称:


  -------
  <s:submit name="SubmitButton" value="Click To Login" action="login_loginForm"/>
Run Code Online (Sandbox Code Playgroud)

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