忽略自定义验证,而不是 required="true" 取决于按下的按钮

Ignore custom validation, but not the required="true" depending on button pressed

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

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

要提交表单,我有两个按钮。单击第一个时,应该仅在该字段为空时才进行验证。到第二个时,应该另外调用自定义验证。 这可能吗?

首先将该验证方法转变为真正的 Validator 实现。

@FacesValidator("topicValidator")
public TopicValidator implements Validator {}

然后你可以在支持disabled属性的<f: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 共享。

另请参阅:

  • How to let validation depend on the pressed button?
  • How does the 'binding' attribute work in JSF? When and how should it be used?