【问题标题】:p:ajax update not working with p:selectBooleanCheckboxp:ajax 更新不适用于 p:selectBooleanCheckbox
【发布时间】:2014-08-09 09:20:58
【问题描述】:

我正在使用 JSF 2 和 Primefaces 4 并遇到以下问题:

我的 XHTML 中有以下代码:

<h:form id="form">
<table>  
    <tr id="formats">
        <td>Formats</td>
        <td>
            <p:selectBooleanCheckbox value="#{bean.entity.formatted}">
                <p:ajax event="change" update="formatsSelect" /> 
            </p:selectBooleanCheckbox>
            <p:selectOneMenu id="formatsSelect" rendered="#{bean.entity.formatted}">
                <f:selectItems value="#{bean.formats}" />
            </p:selectOneMenu> 
        </td>
    </tr>
</table>
</h:form>

它输出一个复选框和一个选择菜单,我期望的是,当我选中复选框时,选择菜单应该出现,当我取消选中它时应该消失....但是没有任何反应,我选中并取消选中它并选择菜单不受影响。

理论上这应该有效,因为 selectBooleanCheckbox 值绑定到 entity.formatted 布尔值,并且 selectOneMenu 中呈现的值绑定到 entity.formatted 值,并且 p:ajax 指向更新属性中的正确 id并且事件是正确的。这是我知道的最后一点,因为我在我的 bean 中创建了一个监听器,它打印了 formatted 的值:

public void changeListener(){
    System.out.println(this.entity.isFormatted());
}

并将 p:ajax 更改为:

<p:ajax event="change" update="formatsSelect" listener="#{bean.changeListener}" /> 

它在控制台中打印了 formatted 的值。 我做错了什么?

【问题讨论】:

    标签: ajax jsf primefaces


    【解决方案1】:

    由于您在组件 (p:selectOneMenu id="formatsSelect") 上使用了 rendered 并更新了相同的组件,因此它不起作用。

    因为在您更新时,该组件可能尚未添加到组件树中/未出现在组件树中。

    所以在它周围使用h:panelGroup 并更新它并在p:selectOneMenu 上使用rendered

    <p:selectBooleanCheckbox value="#{bean.entity.formatted}">
          <p:ajax event="change" update="formatsSelectPG" /> 
    </p:selectBooleanCheckbox>
    
    <h:panelGroup id="formatsSelectPG">
          <p:selectOneMenu id="formatsSelect" rendered="#{bean.entity.formatted}">
                <f:selectItems value="#{bean.formats}" />
           </p:selectOneMenu> 
    </h:panelGroup> 
    

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 2015-01-19
      • 2018-02-18
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      相关资源
      最近更新 更多