页面包含如下所示的表单。
1)如果我插入表格验证=“真”,然后在页面加载后,将此表单提交到邮件操作请求(此时尚未创建验证 xml)。
2)验证xml创建后(与action在同一包中),然后控制对该页面的请求的action返回404页面。
我错过了什么?
<s:form action="mail" method="post">
<s:textfield name="name" key="Your name" size="20" />
<div style="clear: both;margin-top:10px"></div>
<s:textarea label="Comment" name="comment" cols="65" rows="5"/>
<s:submit method="mail" key="Send" align="left"
style="width:100px; height:35px; margin-top:20px"/>
</s:form>
验证 XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="name">
<field-validator type="required">
<message>Please enter a user name</message>
</field-validator>
</field>
<field name="comment">
<field-validator type="required">
<message>Please enter your message</message>
</field-validator>
</field>
</validators>
如果我不添加验证,那么一切都会正常工作。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="ApplicationResources" />
<package name="default" namespace="/" extends="struts-default">
<global-results>
<result name="Exception">/error404.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Throwable" result="Exception" />
</global-exception-mappings>
<!-- loads page -->
<action name="main"
class="com.user.action.LoginAction" method="main">
<result name="success">/main.jsp</result>
</action>
<!-- mail action -->
<action name="mail" class="com.user.action.LoginAction" method="mail" >
<result name="success">/main.jsp</result>
</action>
</package>
</struts>
INPUT
其中一个预定义结果由 Struts2 提供;
基本上,如果您的 Action 发送的参数不正确(转换错误,例如您发送"abc"
to an Integer
Action 变量),或者未通过验证,工作流拦截器返回INPUT
结果并遵循该 Action 的 struts 配置中指定的路径。
你的问题是你没有定义任何INPUT
你的行动的结果,而你总是应该这样做。
您还可以将全局输入结果设置为后备,但要小心......通常,在发生错误时您想要转到的页面INPUT
与发送请求的位置相同。
如果出现INPUT
结果,您的操作方法(例如execute()
) 不会执行,因此如果您在该方法中加载常用数据(例如选择框内容),它将不再可用。
阅读此答案以充分理解这意味着什么以及如何使其发挥作用:
验证失败时如何重新填充控件
INPUT结果处理的详细工作流程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)