Forms 忽略自定义验证,但不忽略必需的=";“真的”;取决于按下的按钮

Forms 忽略自定义验证,但不忽略必需的=";“真的”;取决于按下的按钮,forms,validation,jsf,commandbutton,Forms,Validation,Jsf,Commandbutton,我正在使用JSF,我想验证一个表单。 表单中有一个文本字段,由required=“true”和验证器方法验证 <h:inputText required="true" requiredMessage="Please enter a topic" validator="#{eventController.validateTopic}" /> 要提交表单,我有两个按钮。单击第一个字段时,仅当字段为空时才应为“验证”。在第二种情况下,还应另外调用自定义验证。 这可能

我正在使用JSF,我想验证一个表单。 表单中有一个文本字段,由
required=“true”
和验证器方法验证

<h:inputText
    required="true" requiredMessage="Please enter a topic" 
    validator="#{eventController.validateTopic}" />

要提交表单,我有两个按钮。单击第一个字段时,仅当字段为空时才应为“验证”。在第二种情况下,还应另外调用自定义验证。
这可能吗?

首先将该验证方法转化为真正的实现

@FacesValidator("topicValidator")
public TopicValidator implements Validator {}
然后,您可以在支持
禁用的
属性的中使用它

<h:inputText ...>
    <f:validator validatorId="topicValidator" disabled="..." />
</h:inputText>

要让它检查是否按下了某个按钮,只需检查请求参数映射中是否存在其客户端ID

<h:inputText ...>
    <f:validator validatorId="topicValidator" disabled="#{empty param[secondButton.clientId]}" />
</h:inputText>
...
<h:commandButton binding="#{secondButton}" ... />

...
注意:绝对不要将其绑定到bean属性!上面的代码是原样的。您应该只保证EL变量
#{secondButton}
在当前视图中是唯一的,并且不被其他组件甚至托管bean共享

另见:

谢谢!这对我有帮助!