java - Struts2 中的表单验证

标签 java struts2

页面包含如下所示的表单。

1) 如果我插入表单 validate="true",然后在页面加载此表单后将请求提交到邮件操作(此时尚未创建验证 xml)。

2) 创建验证xml后(与action在同一个pakage中),然后控制请求到该页面的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>

最佳答案

INPUTpredefined results 之一由 Struts2 提供;

基本上,如果您的 Action 发送的参数不正确(转换错误,例如您将 "abc" 发送到 Integer Action 变量),或者不正确如果不通过验证,工作流拦截器将返回 INPUT 结果,并遵循在该 Action 的 struts 配置中指定的路径。

你的问题是你没有为你的 Action 定义任何 INPUT 结果,而你总是应该。

您还可以将全局输入结果设置为后备,但要小心...通常,在 INPUT 情况下您要访问的页面与请求的位置相同已发送。

INPUT 结果的情况下,您的 Action 方法(例如 execute())不会被执行,因此如果您在该方法中加载公共(public)数据,例如 select盒子内容,它将不再可用。

阅读此答案以充分理解这意味着什么以及如何使其发挥作用:

关于java - Struts2 中的表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674746/

相关文章:

java - 如何刷新java中网络名称的解析?

JAVA - 我如何保持增值

java - 防止多次提交 Struts2 : Not Showing Success Message

java - 如何配置 log4j.xml 以从 log4j 迁移到 log4j2?

java - 如何解决 No result Defined for action 和 result input 错误?

java - 二值图像数据的高效存储

java - SparseArray 与 ArrayList 之间的区别?

java - 使用 Collectors.toMap 如何转换 map 值

java - Struts - 在 Action 之间传递参数

java - Struts2 和 Spring3 中的异常处理