我正在使用基于xml的验证。
问题:
我不希望第一次加载页面时在输入表单上执行验证,因为所有字段都是空白供用户填写。假设注册表单添加新学生。单击按钮后,它应该会执行。
注意: 我想保留相同的网址,即使我点击按钮进行验证也是如此。新表单网址为http://localhost:8000/Struts2_Spring_Crud/student/add
,如果验证失败,则网址应该相同。
struts.xml中
<default-action-ref name="list"/>
<action name="list" class="com.myapp.actions.StudentAction" method="getAllStudents">
<!--<interceptor-ref name="myInterceptor"/>-->
<result name="success" type="tiles">/student.list.tiles</result>
</action>
<!--<action name="add">
<result type="tiles">/student.edit.tiles</result>
</action>-->
<action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
<result name="success" type="redirectAction">list</result>
<result name="input" type="tiles">/student.edit.tiles</result>
</action>
输入表单
<s:fielderror/>
<s:form action="add" method="POST">
<s:label name="name" value="Name *"/>
<s:textfield name="student.name" value="%{student.name}"/>
<s:fielderror fieldName="student.name"/>
<s:label name="age" value="Age *"/>
<s:textfield name="student.age" value="%{student.age}"/>
<s:submit name="saveForm" value="#title"/>
</s:form>
已编辑:如果我要添加excludeMethods,则此网址http://localhost:8000/Struts2_Spring_Crud/student/add
会将我发送给http://localhost:8000/Struts2_Spring_Crud/student/list
并且我的添加表单未显示。
<action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<result name="success" type="redirectAction">list</result>
<result name="input" type="tiles">/student.edit.tiles</result>
</action>
答案 0 :(得分:2)
我遇到了这个问题,我终于找到了一个解决方案,你只需要一个动作来处理所有内容并在浏览器上保留相同的URL:
http://localhost:8000/Struts2_Spring_Crud/student/add
struts.xml只会是:
<action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
<result name="success" type="redirectAction">list</result>
<result name="input" type="tiles">/student.edit.tiles</result>
</action>
第一次加载页面时,与&#34相关联的类添加&#34;行动首先被召唤。然后该班的田径学生为空。然后你可以依靠这个事实来清除strut所做的验证。
所以你应该在你的动作类中添加一个validate()方法,它将删除那些愚蠢地发现的验证错误:
public class StudentAction extends ActionSupport{
MyStudent student;
public MyStudent getStudent(){
return student;
}
public void setStudent(MyStudent student){
this.student=student;
}
public String execute(){
if (student==null) return INPUT; //First time page loads. We show page associated to INPUT result.
return SUCCESS; // If student is not null and execute was called it means that everything went fine, we should return SUCCESS and go to the page associated to the SUCCESS result.
}
public String insertOrUpdateStudent(){
if (student==null) return INPUT;
return SUCCESS;
}
.....
@Override
public void validate(){ //
if (student==null){ //First time page loads, student is null.
setFieldErrors(null); //We clear all the validation errors that strut stupidly found since there was not form submission.
}
}
}
Struts首先通过xml验证器内容验证表单,然后调用您的validate方法。
当你在表单上点击提交时,strut会创建一个MyStudent对象,调用setStudent(...),然后按字段调用getStudent(),然后调用set&#34; FieldName& #34; MyStudent对象。之后,它通过xml验证器资料验证学生对象,然后调用您的验证方法。
如果在调用validate()方法后仍然存在错误,那么strut将返回&#34; INPUT&#34;结果,而不是在你的情况下调用execute()或insertOrUpdateStudent()方法。
希望这有帮助!!!
答案 1 :(得分:0)
我正在使用基于注释的验证。在我的struts.xml中,我有
<interceptor-ref name="validation">
<param name="validateAnnotatedMethodOnly">true</param>
</interceptor-ref>
您可能想尝试为基于xml的验证添加excludeMethods
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
以下是validation interceptor的文档。
答案 2 :(得分:0)
我总是使用其他指标来执行此操作:
JSP:
<s:form action="add">
<s:hidden name="postBack" value="true"/>
<%-- your fields --%>
</s:form>
动作:
public String execute(){
if(!postBack){
return OPEN;
} else if(!validate()) {
return INPUT;
} else {
save();
return SUCCESS;
}
}
配置:
<action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
<result name="success" type="redirectAction">list</result>
<result name="input" type="tiles">/student.edit.tiles</result>
<result name="open" type="tiles">/student.edit.tiles</result>
</action>
答案 3 :(得分:0)
您可以使用fieldexpression validator
http://struts.apache.org/2.x/docs/fieldexpression-validator.html进行条件验证,例如基于id
等隐藏字段。