我正在与一个文本字段的自定义验证程序进行斗争。自定义验证似乎只在执行所需的验证之后才能工作。这意味着没有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消息的方法。
编辑&最终答案
结论和一个例子:http://mardou.dyndns.org/Privat/osnippets.nsf/id/OBUE-95BLK4
发布于 2013-02-26 22:17:16
所需的验证器总是在验证过程中执行的第一个验证器。这意味着你问题的第一部分的答案是肯定的。
但这并不意味着您需要一个必需的验证器才能使用自定义验证器:您问题的这一部分必须以明确的否定来回答。
所需的验证器是一种特殊的“黑客”,因为只有当组件接收到新值(也不是空白)时,才会执行验证器。
我不知道为什么您对自定义验证器有问题-在您描述的场景中,您只是使用所需的验证器.
编辑
只需“使您的验证器掉头”:将自定义验证器从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" />https://stackoverflow.com/questions/15098964
复制相似问题