我使用required="true"
输入以下内容:
<p:inputText value="#{bean.value}" required="true">
<p:ajax event="change" listener="#{bean.change()}" />
</p:inputText>
当用户更改值时,将触发侦听器,我可以访问更改的值。当用户清空该字段时,不会触发侦听器,并且我的bean中的空值不会更新。我认为这是由requried="true"
引起的。我想用空值更新我的bean,并在用户清空该字段时触发监听器。我怎样才能做到这一点?
答案 0 :(得分:3)
您也可以在required
属性中使用表达式语言(EL)。然后,您可以检查是否已按下表单的主提交按钮。想象一下,您的表单有一个“保存”按钮,如下所示,
<p:inputText ... required="true">
<p:ajax ... />
</p:inputText>
...
<p:commandButton ... action="#{bean.save}" />
然后,只有在调用按钮时,才能让required
属性评估true
。您可以通过binding
引用组件并检查其客户端ID是否存在于HTTP请求参数映射中来实现:
<p:inputText ... required="#{not empty param[save.clientId]}">
<p:ajax ... />
</p:inputText>
...
<p:commandButton binding="#{save}" ... action="#{bean.save}" />
请注意#{save}
是原样的,绝对不能绑定到支持bean,并且变量名在当前视图和EL范围内必须是唯一的。
答案 1 :(得分:0)
问题是如果用户清除了所需的输入字段,那么'required'验证器会抛出异常,并且不会调用bean setter。重新加载表单后,清除的值将再次从bean中显示。这是我的解决方法:
public String getSomething() {
return isFormValueEmpty("form:something") ? null : this.something;
}
private Boolean isFormValueEmpty(String formFieldName) {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
String formValue = ec.getRequestParameterMap().get(formFieldName);
logger.debug("Check if form value is empty: [{}] [{}]", formFieldName, formValue);
return StringUtils.isEmpty(formValue);
}