有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Struts Xwork验证忽略应用程序返回按钮

对于某些页面,我不得不忽略应用程序上的Struts验证。 我有一大堆书页。用户完成一个页面,然后单击“下一步”按钮进入另一个页面。 单击“下一步”时,将对必需元素进行验证检查,并且这些元素工作正常

在同一页面中有“后退”按钮,单击该按钮用户将导航到上一页。 即使未输入强制元素,用户也应允许转到上一页。 但就我而言,强制检查正在停止

我正在使用Struts验证框架。 我有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) 个答案

  1. # 1 楼答案

    我已经找到了解决我问题的办法。我创建了自己的验证器。 它处理两件事

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

      /**

      • 类用于检查强制字符串
      • 此类可用于页面流
      • 和同一个动作班谈话

      */

      公共类MandatoryStringFieldValidator扩展了FieldValidator支持{

           // 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);
              }
          }
      }
      

      }

    验证。xml

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

    最终进入验证阶段。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>
    

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