我有一个表单,我需要在提交时进行验证。我已将public void validate()
添加到我的操作类中。但是,当表单尚未提交时,即使在初始页面加载时也会显示错误。
我已阅读this和this,但没有解决我的问题。实现诸如在第一次表单加载时跳过验证这样简单的事情真的很难吗? :(
我在动作类中使用手动验证。
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()
注释,但这可以防止错误显示,即使在表单提交后也是如此。
答案 0 :(得分:6)
您可以在LoginAction类中再使用一个方法,使用 @SkipValidation
返回输入的login.jspLoginAction.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
或其他内容。