customValidator没有必需的Validator?

时间:2013-02-26 20:48:43

标签: validation xpages xpages-ssjs

我正在为文本字段的自定义验证器苦苦挣扎。似乎自定义验证仅在执行所需的验证后才有效。这意味着没有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是添加faces消息的方法。

编辑&amp;最终答案

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

1 个答案:

答案 0 :(得分:3)

required validator 始终是验证期间执行的第一个验证器。这意味着你问题第一部分的答案是肯定的。

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

必需的验证器是一种特殊的&#34; hack&#34;,因为只有当你的组件收到一个新值(也就是空白)时才会执行验证器。

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

修改

只需&#34;转换验证器&#34;:将自定义验证器从 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" />