无论如何,在输入时向 bean 提交空值,所需="true"



我有以下required="true"的输入:

<p:inputText value="#{bean.value}" required="true">
    <p:ajax event="change" listener="#{bean.change()}" />
</p:inputText>

当用户更改值时,侦听器被触发,我可以访问更改的值。当用户清空字段时,不会触发侦听器,也不会在bean中更新空值。我猜想这是由requried="true"引起的。我想用空值更新我的bean,并在用户清空字段时触发侦听器。我怎样才能做到这一点呢?

您也可以在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作用域中必须是唯一的。

参见:

    如何让验证依赖于按下的按钮?

问题是,如果用户清除所需的输入字段,那么'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);
}

相关内容

  • 没有找到相关文章

最新更新