【问题标题】:Struts 2 server side validation using XML not working for struts action使用 XML 的 Struts 2 服务器端验证不适用于 struts 操作
【发布时间】:2013-10-08 15:31:11
【问题描述】:

我正在使用带有 XML 的 Struts 2 Validator 框架。但是服务器端验证不起作用。以下是代码sn-p。

Struts.xml

<interceptor-stack name="MyStack">
    <interceptor-ref name="alias"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="prepare"/>
    <interceptor-ref name="i18n"/>
    <interceptor-ref name="chain"/>
    <interceptor-ref name="debugging"/>
    <interceptor-ref name="profiling"/>
    <interceptor-ref name="scopedModelDriven"/>
    <interceptor-ref name="modelDriven"/>
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="checkbox"/>
    <interceptor-ref name="staticParams"/>
    <interceptor-ref name="params">
        <param name="excludeParams">dojo\..*,^struts\..*,.*\\.*,.*\(.*,.*\).*,.*@.*</param>
    </interceptor-ref>
    <interceptor-ref name="conversionError"/>
    <interceptor-ref name="validation">
        <param name="excludeMethods">input,back,cancel,browse,reset</param>
    </interceptor-ref>
    <interceptor-ref name="workflow">
        <param name="excludeMethods">input,back,cancel,browse,reset</param>
    </interceptor-ref>
</interceptor-stack>

<action name="process" method="process" class="org.web.action.MyAction">
    <interceptor-ref name="MyStack" />
    <result name="success">success.jsp</result>
    <result name="error">error.jsp</result>
    <result name="wait">wait.jsp</result>
    <result name="input">Index.jsp</result>
</action>

MyAction.java

public class MyAction extends ActionSupport {
    private String amount;
    public String getAmount() {
        return amount;
    }
    public void setAmount(String amount) {
        this.amount = amount;
    }
    public String process() throws Exception {
       //some processing done here    
    }
}

MyAction-process-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "@@xwork.validator.dtd@@">
<validators>
    <field name="amount">
        <field-validator type="requiredstring" short-circuit="true">
            <message key="order.amount.required"/>
        </field-validator>
        <field-validator type="amountValidator" short-circuit="true">
            <message key="order.amount.invalid" />
        </field-validator>
    </field>
</validators>

AmountValidator.java

public class AmountValidator extends FieldValidatorSupport {
    public Struts2DonationAmountValidator() {
        super();
    }

    public void validate(Object object) throws ValidationException {
        //some validation check here
    }
}

validators.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "https://s3.amazonaws.com/static/xwork-validator-config-1.0.dtd">
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator" />
    <validator name="amountValidator" class="org.web.validator.AmountValidator"/>
</validators>

Index.jsp

<input type="text" id="amountTemp" name="amount">

我已将 sysouts 放在验证器的第一行以及操作方法中。 AmountValidator.java 中的 sysout 未被调用。即使在调试时,也不会调用验证,并且控件会跳转到操作方法。控制台中没有任何异常的提示。操作方法流程工作正常。

提前致谢!!!

【问题讨论】:

  • 好吧,你定义了“required”并尝试使用“requiredstring”。首先看看你是否可以让默认验证器工作;您不需要为默认验证器创建条目。
  • @DaveNewton 感谢您的及时回复。我将其更改为“必需字符串”。但是默认验证器也不能正常工作。没查到有没有配置相关的东西?
  • 创建一个最小失败的例子,并把它放在github的某个地方,我会看看。
  • 好的,我会尝试创建一个项目并将其放在某个地方。但与此同时,如果您想从现有代码中获得更多信息,请告诉我。

标签: struts2 validation struts-validation


【解决方案1】:

我在http://struts.apache.org/release/2.1.x/docs/validation.html 上找到了另一个解决方案。我将 MyAction-process-validation.xml 的名称更改为 MyAction-processAction-validation.xml 并将我的操作命名为 processAction 而不是 process。这意味着我使用动作名称而不是方法。

感谢您的支持。

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2023-03-28
    • 2013-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多