Validation 没有requiredValidator的customValidator?

Validation 没有requiredValidator的customValidator?,validation,xpages,xpages-ssjs,Validation,Xpages,Xpages Ssjs,我正在努力使用文本字段的自定义验证器。似乎只有在执行了所需的验证之后,自定义验证才会起作用。这意味着没有requiredValidator的字段不能进行自定义验证-是这样吗? 我想做的是: 我有一个文本字段。仅当选择了另一个字段中的特定值(此处为复选框组)时,才需要该值。这是一个依赖验证。在需要文本字段之前,我的自定义验证器可以正常工作,但情况不应该是这样 复选框没有特定值->文本字段可以为空 复选框保存值->文本字段必须有值 有什么想法吗 <xp:inputText id="in

我正在努力使用文本字段的自定义验证器。似乎只有在执行了所需的验证之后,自定义验证才会起作用。这意味着没有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>

0&&getComponentValue(“InputExt2”).length==0)postValidationError(此,“foo”)}]>
其中,getComponentValue是从组件接收带有getValue或getSubmittedValue的值的方法,postValidationError是添加faces消息的方法

编辑和最终答案

结论和示例:

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

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

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

我不知道为什么自定义验证器会有问题-在您描述的场景中,您只是在使用所需的验证器

编辑

只需“翻转您的验证器”:将自定义验证器从InputExt2添加到InputExt1,它就可以工作了

编辑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" />

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

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

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

我不知道为什么自定义验证器会有问题-在您描述的场景中,您只是在使用所需的验证器

编辑

只需“翻转您的验证器”:将自定义验证器从InputExt2添加到InputExt1,它就可以工作了

编辑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" />


提供您正在尝试的示例代码将有助于获得答案。是的,没错,但这是我的第一篇帖子,我不确定我能提供多少代码,因为这是XSP、SSJS和其他与我的问题相关的东西的组合;)我将通过提供一些代码来澄清它!我只需要将这个问题分解为一个简单的构造。您的验证器无法工作:如果InputExt2为空,则不会触发customValidator(只需将打印内容添加到控制台,您就会明白我的意思)。是的,这就是问题所在,但我也没有使用所需的验证器。你能给我一个这样的提示吗?我已经在我的回答中添加了一个例子。提供你正在尝试的示例代码将有助于获得答案。是的,没错,但这是我的第一篇帖子,我不确定我能提供多少代码,因为这是XSP、SSJS和其他与我的问题相关的东西的组合;)我将通过提供一些代码来澄清它!我只需要将这个问题分解为一个简单的构造。您的验证器无法工作:如果InputExt2为空,则不会触发customValidator(只需将打印内容添加到控制台,您就会明白我的意思)。是的,这就是问题所在,但我也没有使用所需的验证器。你能给我一个这样的提示吗?我在我的回答中加了一个例子!谢谢你的帖子!这是我的第一次尝试:根据另一个字段的值,使用“计算”所需的验证器。那是行不通的。自定义验证器用于检查第一个字段的值,如果第二个字段为空,则传递一条新的faces消息。您好,Sven!谢谢你的帖子!这是我的第一次尝试:根据另一个字段的值,使用“计算”所需的验证器。那是行不通的。自定义验证器用于检查第一个字段的值,如果第二个字段为空,则传递一条新的faces消息。