0

我正在为文本字段使用自定义验证器。似乎自定义验证仅在执行所需验证后才有效。这意味着无法自定义验证没有 requiredValidator 的字段 - 是这样吗?我想做的事:

我有一个文本字段。只有选择了另一个字段中的特定值(这里是一个复选框组),才需要该值。这是一个依赖验证。在需要文本字段之前,我的自定义验证器可以正常工作 - 但情况并非如此。

复选框没有特定值 -> 文本字段可以为空白
复选框保存值 -> 文本字段必须有值。

有任何想法吗?

    <xp:inputText id="inputText1" disableClientSideValidation="true">
</xp:inputText>

<xp:inputText id="inputText2" disableClientSideValidation="true">

    <xp:this.validators>
        <xp:customValidator message="err">
            <xp:this.validate><![CDATA[#{javascript:if(getComponentValue("inputText1").length>0 && getComponentValue("inputText2").length==0) postValidationError(this, "foo")}]]></xp:this.validate>
        </xp:customValidator>

    </xp:this.validators>
</xp:inputText>

其中 getComponentValue 是一种从组件接收带有 getValue 或 getSubmittedValue 的值的方法,而 postValidationError 是一种添加面孔消息的方法。

编辑和最终答案

结论和示例:http: //mardou.dyndns.org/Privat/osnippets.nsf/id/OBUE-95BLK4

4

1 回答 1

3

所需的验证器始终是验证期间将执行的第一个验证器。这意味着您问题第一部分的答案是肯定的。

但这并不意味着您需要一个必需的验证器才能使用自定义验证器:您的这部分问题必须用明确的“否”来回答。

所需的验证器是一种特殊的“hack”,因为只有当您的组件接收到新值(也就是非空白)时才会执行验证器。

我不确定为什么您对自定义验证器有问题 - 在您描述的场景中,您只是在使用必需的验证器......

编辑

只需“转动您的验证器”:将自定义验证器从inputText2添加到inputText1,它应该可以工作。

编辑2:

<xp:inputText id="inputText1" disableClientSideValidation="true">
   <xp:this.validators>
      <xp:customValidator message="err">
         <xp:this.validate><![CDATA[#{javascript:
            var val = getComponent("inputText2").getSubmittedValue();
               if( val.equals("") == true )
                  return false;
               null}]]>
         </xp:this.validate>
      </xp:customValidator>
   </xp:this.validators>
</xp:inputText>

<xp:inputText id="inputText2" disableClientSideValidation="true" />
于 2013-02-26T22:17:16.380 回答