Struts Xwork验证忽略应用程序后退按钮

时间:2014-05-16 15:06:36

标签: java javascript struts2 xwork

我有一些方案可以忽略某些页面的应用程序上的Struts验证。 我有一个页面流。用户完成一页并单击"下一步"按钮进入另一页。 单击Next时,会对必需元素进行验证检查,并且它们正常工作。

在同一页面中有"返回"按钮,单击该按钮用户将导航到上一页。 即使未输入必填元素,用户也应允许转到上一页。 但在我的情况下,强制检查正在停止。

我正在使用Struts Validation Frame工作。 我有AdminWorkFlow-Validation.xml个文件,其中包含页面所需的所有验证。

如何进行验证检查单击“后退”按钮时忽略。

使用Struts 2.0.11和

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

1 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。我创建了自己的验证器。 哪个处理两件事。

  1. 单击“后退”按钮时忽略验证
  2. 通过提供向导索引(静态)和页面索引(按页面设置)来管理具有相同操作的多个表单系列。 示例代码:

    / **

    • Class用于检查强制字符串。
    • 此类可用于页面流程
    • 与同一个Action类交谈

    * /

    公共类MandatoryStringFieldValidator扩展了FieldValidatorSupport {

         // Holds the Current Page Index, value picked from JSP(Front End)
    private String pageIndex = "0";
    // Holds the Wizard Page which is set in the xxx-validation.xml
    private String wizardPage = "0";
    // Holds a Value  by which I can identify if the action is back button click
    //If true validation is ignored. This is also taken from the JSP(Front End)
    private String backClicked;
    
    public String getBackClicked() {
        return backClicked;
    }
    
    public void setBackClicked(String backClicked) {
        this.backClicked = backClicked;
    }
    
    public String getPageIndex() {
        return pageIndex;
    }
    
    public void setPageIndex(String pageIndex) {
        this.pageIndex = pageIndex;
    }
    
    public String getWizardPage() {
        return wizardPage;
    }
    
    public void setWizardPage(String wizardPage) {
        this.wizardPage = wizardPage;
    }
    
    @Override
    public void validate(Object object) throws ValidationException {
        final String fieldName = getFieldName();
        final Object value = getFieldValue(fieldName, object);
        if(!"0".equals(pageIndex)){
            Integer pageIndexValue = (Integer) getFieldValue(pageIndex, object);
            if (pageIndexValue != null) {
                backClicked = (String) getFieldValue(backClicked, object);
                if(StringUtils.isNotBlank(backClicked) && Boolean.valueOf(backClicked)){
                    pageIndexValue = pageIndexValue - 1;
                }
                pageIndex = String.valueOf(pageIndexValue);
            }
        }
        if(wizardPage.equals(pageIndex)) {
            if (!(value instanceof String)) {
                addFieldError(fieldName, object);
                return;
            }
            String strValue = (String) value;
            if (StringUtils.isBlank(strValue)) {
                addFieldError(fieldName, object);
            }
        }
    }
    

    }

  3. <强>的validation.xml

    <validators>
        <validator name="requiredStringValidator"   
                 class="com.client.validation.MandatoryStringFieldValidator"/>
    </validators>
    

    最后在-validation.xml

    <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
            "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
    
    <validators>
        <field name="serviceMot.driverName">
            <field-validator type="requiredStringValidator" short-circuit="true">
                            <param name="pageIndex">pageIndex</param>
                <param name="backClicked">backClicked</param>
                <param name="wizardPage">1</param>
                <message>${getText('page1.mandatoryName')}</message>
            </field-validator>
    </validators>
    

    请注意:我已经删除了一些代码,因为它有生产代码并且也改变了文件中的名称。