我正在为文本字段的自定义验证器苦苦挣扎。似乎自定义验证仅在执行所需的验证后才有效。这意味着没有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
答案 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" />