Struts2验证框架不验证字段

时间:2012-06-30 14:57:43

标签: java java-ee struts2

我是Struts2的新手。我想将验证框架用于简单的“注册”表单。这是我的JSP页面表单元素;

    <s:form action="register">
            <s:textfield name="name" label="Name" />
            <s:textfield name="age" label="Age" />
            <s:textfield name="email" label="email"/>
            <s:submit value="Register" />
        </s:form>  
 validation error ? = <s:actionerror /><br/>
        ---Action Message--- <s:actionmessage/>

这是struts2.xml文件;

    <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
       <package name="default" extends="struts-default">        
        <action name="register"
                class="com.action.RegisterAction">
                <result name="success">home.jsp</result>    
                <result name="input">index.jsp</result>
                </action>     
       </package>
</struts>

RegisterAction 类有

  • 字符串名称;
  • int age;
  • 字符串电子邮件; getter和setter的变量。它的execute()只返回 SUCCESS

对于这些字段验证,使用以下验证xml文件,现在只检查一个字段 name 。验证文件的名称为RegisterAction-validation.xml

    <!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<!-- Author: Aash -->     
<validators>     
    <field name="name">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>name is required.. :) </message>
        </field-validator>
    </field>    
</validators>

这是项目结构enter image description here

请任何人告诉我如何才能想出这个。提前致谢。

新添加:根据struts.xml,如果出现错误(验证说错了),页面应重定向到 index.jsp ,但是当字段'name'没有给出任何内容时,仍然会转到home.jsp。

找到解决方案
我添加到validation.xml
!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
但它显示在Form的顶部,我不知道为什么不打印为actionError。我如何得到它打印在我想要查看的位置(例如:表格的底部)?

4 个答案:

答案 0 :(得分:2)

由于它是一个字段错误,因为您已将元素放在JSP页面中,因此消息接近字段“name”。如果你想打印它,你希望它在哪里,<s:fielderror fieldName="name" />

答案 1 :(得分:0)

我认为问题是xml文件名。它应该是RegisterAction-validation.xml

答案 2 :(得分:0)

this所述,DOCTYPE应该在validation.xml中 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> -->

答案 3 :(得分:0)

将参数验证值设为'true;在<s:form action="register" validate="true">