【问题标题】:Struts2 Validation using XML not working?使用 XML 的 Struts2 验证不起作用?
【发布时间】:2013-03-14 12:34:42
【问题描述】:

我正在尝试使用使用 XML 的 Struts2 验证来检查客户输入的各种字段。我的struts.xml 扩展了struts-default,我有一个非常简单的动作类TestAction 扩展了ActionSupport,但它不起作用。

如果有人能够帮助我了解我的不足,我将非常感激。

这是我所拥有的:

CustomerAction-validation.xml

<?xml version="1.0" encoding="UTF-8"?>

  <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
    <field name="customerName">
        <field-validator type="requiredstring">
            <message>Required</message>
        </field-validator>
    </field>
</validators>

struts.xml

<action name="addCustomer" class="com.yell.hibu.action.CustomerAction"
            method="execute">
            <interceptor-ref name="validation"/> 
             <param name="excludeMethods">  
                    input,back,cancel,browse  
                </param>
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">2097152</param>
                <param name="allowedTypes">
                    image/png,image/gif,image/jpeg,image/pjpeg
                </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/success.jsp</result>
            <result name="input">/registration.jsp</result>
        </action>

这里我只有一个字段的 Registration.jsp

<s:form action="addCustomer" id="register-form" method="post"  validate="true" theme="xhtml" enctype="multipart/form-data">
<s:actionerror/>
<s:fielderror/>
<s:textfield name="customer.customerName" label="Customer Name:" cssClass="tooltip"  title="Max 10 characters allowed." maxlength="10"/>

【问题讨论】:

  • 没有足够的信息来提供帮助。验证文件部署到哪里?发生/不发生什么?该操作是否具有适当的 getter/setter?
  • TestAction的代码是什么?
  • 试试这个链接,希望它能解决你的问题roseindia.net/struts/struts/struts2.2.1/…

标签: java struts2


【解决方案1】:

你的

<interceptor-ref name="validation"/> 

是自闭的,那么

<param name="excludeMethods">  
        input,back,cancel,browse  
</param>

永远不会被读取。

Validation Interceptor 应该在Params Interceptor 之后运行,如examples from the documentation 中所示。

同样,根据文档,

此拦截器通常是堆栈中应用的最后一个(或倒数第二个)拦截器之一,因为它假定所有值都已在操作上设置。

然后,尝试这样做:

<action name="addCustomer" class="com.yell.hibu.action.CustomerAction" 
        method="execute">

    <interceptor-ref name="defaultStack"></interceptor-ref>

    <interceptor-ref name="validation"> 
        <param name="excludeMethods">  
            input,back,cancel,browse  
        </param>
    </interceptor-ref>

    <interceptor-ref name="fileUpload">
        <param name="maximumSize">2097152</param>
            <param name="allowedTypes">
                image/png,image/gif,image/jpeg,image/pjpeg
            </param>
    </interceptor-ref>

    <result name="success">/success.jsp</result>
    <result name="input">/registration.jsp</result>
</action>

如果它不起作用,也发布您的 JSP 和 Action。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多