gpt4 book ai didi

ajax - :ajax update not working with p:selectBooleanCheckbox

转载 作者:行者123 更新时间:2023-12-04 22:12:26 27 4
gpt4 key购买 nike

我正在使用 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>

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

理论上这应该有效,因为 selectBooleanCheckbox 值绑定(bind)到 entity.formatted bool 值,并且 selectOneMenu 中的呈现值绑定(bind)到 entity.formatted 值,并且 p:ajax 指向更新属性和事件中的正确 id是正确的。这是我知道的最后一点,因为我在我的 bean 中创建了一个监听器,它打印了格式化的值:
public void changeListener(){
System.out.println(this.entity.isFormatted());
}

并将 p:ajax 更改为:
<p:ajax event="change" update="formatsSelect" listener="#{bean.changeListener}" /> 

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

最佳答案

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

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

所以使用 h:panelGroup围绕它并更新它并使用renderedp:selectOneMenu .

<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>

关于ajax - :ajax update not working with p:selectBooleanCheckbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296402/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com