p:ajax更新不工作与p:selectBooleanCheckbox



我使用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值绑定到实体。格式化的布尔值和selectOneMenu中的呈现值被绑定到实体。格式化的值,并且p:ajax指向update属性中的正确id,并且事件是正确的。我之所以知道这一点,是因为我在bean中创建了一个侦听器,该侦听器打印了格式化:

的值
public void changeListener(){
    System.out.println(this.entity.isFormatted());
}
并将p:ajax改为:
<p:ajax event="change" update="formatsSelect" listener="#{bean.changeListener}" /> 

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

由于您在组件(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> 

相关内容

  • 没有找到相关文章

最新更新