我正在使用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共享。
参见:
- 如何让验证依赖于按下的按钮?
- 如何'绑定'属性在JSF中工作吗?何时以及如何使用?