仅在特定的提交按钮上限制f:validator

时间:2012-06-27 09:16:27

标签: jsf jsf-2 ajax4jsf

我有一个JSF表单,其中有一个textarea和多个按钮。 对于文本区域,我正在使用f:validator

进行验证
<f:validator validatorId="myValidator" />
<a4j:support event="onsubmit" ajaxSingle="true" process="textarea1" />

验证器按预期工作。现在我在页面上有多个提交按钮,我希望验证仅在特定按钮上发生,并且在剩余按钮上应忽略验证器。

无论如何,仅在特定的提交按钮上限制验证器。感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用disabled属性。

<f:validator validatorId="myValidator" disabled="#{empty param['formId:buttonId']}" />

其中formId<h:form>的ID,buttonId是按钮的ID,该按钮应该是触发验证的唯一按钮。

答案 1 :(得分:2)

我假设您在点击其他按钮时也要向服务器提交textarea值(因此无法使用process属性进行播放)

如何将immediate="true"添加到其他按钮?

这样他们就会跳过验证,而没有immediate="true"的提交按钮会按预期进行验证

或者

本文JSF 2 - Conditionally Skip Validation

中似乎有另一种解决方法

这样的东西
<h:commandButton action="#{bean.someMethod"} value="Submit2">
   <f:param name="skipValidation" value="true"/>
</h:commandButton>

并在验证器的validate方法内检查skipValidation attirbute(在文章中寻找进一步的解释......)