4

我有一个表单需要在提交时进行验证。我已经添加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>

登录操作.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注释 over execute(),但这可以防止显示错误,即使在表单提交之后也是如此。

4

3 回答 3

7

您可以在 LoginAction 类中使用另一种方法来返回带有@SkipValidation的 Input 的 login.jsp

登录操作.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;
     }

现在验证将只发生在执行方法上。首先请求应该来到 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>

Here method="{1}" entry in the action element will be used to check which method got requested for, if nothing is specified in the request then the execute() method will be invoked otherwise mentioned method will be invoked.Note the action name has changed to login_*

To mention the method name in the JSP:


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


In the submit UI element above action have got mentioned as login_loginForm. Here login_ refers the action name and loginForm refers the method to be invoked. Hope this will help

于 2012-10-24T09:57:52.177 回答
2

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

于 2012-10-24T09:06:13.293 回答
1

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

于 2012-10-24T09:01:33.337 回答