1

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

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>

金额验证器.java

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

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

验证器.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>

索引.jsp

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

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

提前致谢!!!

4

1 回答 1

2

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

谢谢你的支持。

于 2013-10-09T15:38:26.157 回答