我对struts2还不熟悉,试着用 addFieldError
以我的形式 <s:select>
标签。我有一个窗体,在其中我必须从下拉列表中选择一个值。第一次显示这个表单时,响应来自一个action类,我在其中创建了一个列表。在我的表单中,我使用 <s:select>
标记如下:
<s:form action="clientselect">
<h2>Select Client to add the case :</h2>
<table>
<s:select list="list" headerKey="-1" headerValue="Select Client"
label="Select Client" tooltip="Select the desired client" name="client">
</s:select>
<tr><td><s:submit value="Register Case" theme="simple" align="right"/></td>
<td><s:reset value="Reset" theme="simple" align="right"/></td></tr>
</table>
</s:form>
“pageinclude=ancar”打印此表单。
struts.xml文件
<action name="clientselect" class="casediary.JudicialCaseRegisterValidation" method="execute">
<result name="addcase">user.jsp?pageinclude=ncr</result>
<result name="error">user.jsp?pageinclude=errancar</result>
<result name="input">user.jsp?pageinclude=ancar</result>
<result name="loggedout">index.jsp?pageinclude=relogin</result>
</action>
在judicialcaseregistervalidation.java中
public void validate()
{
if(client==null || client.equals("-1"))
addFieldError("client", "This field can not be blank.");
}
一切正常。错误条件得到满足,结果我得到“输入”。错误消息也正在打印,但下拉列表中的值已消失。列表打印为空。因为这个时间响应不是来自设置列表的action类。
然后我修改了struts.xml,将请求从 <result>
这样地:
<result name="input" type="redirect">link.action</result>
“link.action”是在action类中发送请求以创建列表并打印表单的内容。
但是这一次表单只是再次打印&没有打印错误消息。
我想再次打印该列表,以及它旁边的错误消息。请告诉我怎么做。?
2条答案
按热度按时间0s7z1bwu1#
我认为type=“redirectaction”可以重定向到特定的操作
像这样的
<result name="input" type="redirectAction">link</result>
希望有帮助如果我是正确的,或者您在任何地方返回这样的操作结果,那么可以在execute()方法中设置它
ac1kyiln2#
几乎每个开始使用struts2的人都会遇到这个问题,很快或稍后。
在struts2中请求操作时,您的请求将通过一个拦截器堆栈(拦截器列表);每个拦截器所做的都是特定的业务,然后重定向请求(在出现错误的情况下)或继续执行到下一个拦截器,或者执行到最后一个拦截器的操作。
验证由验证拦截器执行。如果验证失败,它将劫持请求并将其重定向到struts.xml中定义的输入结果。无论验证是通过xml、注解还是在操作内部的validate()方法中进行:都不会到达操作!然后,里面的一切
execute()
方法,或者您正在调用的方法(如果您使用的是自定义方法)没有执行;如果需要将列表元素加载到
execute()
方法,在输入结果的情况下不会执行。避免此问题的主要方法是:
实现preparable接口,将所有数据加载的东西放到prepare()方法中。
该方法由prepare拦截器运行,该拦截器位于validation拦截器之前;
它将始终运行,并且它将在验证之前运行,无论您的操作采用哪种方法(
execute()
或者其他)您正在呼叫,或者如果您遇到验证错误;使用
<s:action/>
标记,以调用返回jsp片段的伪操作;使用
redirectAction
作为输入结果类型execute()
(或其他)方法,就像你正在做的那样。重定向时,它将丢失所有请求参数(包括操作错误、字段错误、操作消息等),然后您需要通过在struts.xml中将它们声明为
redirectAction
结果。第一条路是首选,伊莫。
编辑:
在官方文档中也发现了:当验证失败时,我们如何重新填充控件?