gpt4 book ai didi

jakarta-ee - struts2 在页面加载时禁用验证

转载 作者:行者123 更新时间:2023-12-04 02:05:31 25 4
gpt4 key购买 nike

我正在使用基于 xml 的验证。

问题:

我不想在第一次加载页面时对输入表单执行验证,因为所有字段都是空白供用户填写。假设注册表单要添加新学生。单击按钮后它应该执行。

注意: 即使在单击按钮时进行验证,我也想保留相同的 url。新表单 URL 是 http://localhost:8000/Struts2_Spring_Crud/student/add,如果验证失败甚至比 url 应该相同。

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 而不是此 url 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>

最佳答案

我解决了这个问题,我终于找到了一个解决方法,可以解决您只需要一个操作来处​​理所有事情并在浏览器上保留相同 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>

您的页面第一次加载时,首先调用与“添加”操作关联的类。然后类(class)的现场学生为空。然后您可以依靠该事实来清除 strut 所做的验证。

因此,您应该向您的操作类添加一个 validate() 方法,该方法将删除 strut 愚蠢地发现的验证错误:

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 验证器验证表单,然后调用您的验证方法。

当您点击表单上的提交时,strut 会创建一个 MyStudent 对象,调用 setStudent(...) 然后它逐个字段调用 getStudent() 然后调用 set"FieldName"我的学生对象。之后,它通过 xml 验证器验证学生对象,然后调用您的验证方法。

如果在调用 validate() 方法后仍然存在错误,则 strut 将返回“INPUT”结果,而无需调用您的情况下的 execute() 或 insertOrUpdateStudent() 方法。

希望这有帮助!!!

关于jakarta-ee - struts2 在页面加载时禁用验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com