gpt4 book ai didi

java - Primefaces 组件不更新

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:22 24 4
gpt4 key购买 nike

我有一个 p:dataGrid,它曾经在 3.0.1 中 self 更新。现在我升级到 PF 3.1,“availableIcons”组件的 ajax 更新事件不再触发。我没有收到在 View 中找不到该组件的错误。

XHMTL

<h:form id="Application">
......
<p:confirmDialog id="iconDialog" message="Select one icon"
showEffect="bounce" hideEffect="explode" header="Icon Selection"
severity="alert" widgetVar="iconSelect" modal="false">

<p:dataGrid id="availableIcons" var="icon"
value="#{appEditController.availableIcons}" columns="4">

<p:column>
<p:panel id="pnl" header="" style="text-align:center">
<h:panelGrid columns="1" style="width:100%" id="iconPanelGrid">
<p:graphicImage value="/resources/icons/#{icon.icon}"
id="iconImage" />
<p:selectBooleanCheckbox id="iconSelector"
value="#{icon.selected}"
disabled="#{appEditController.isIconSelected(icon)}">
<p:ajax update="availableIcons" event="change"
process="availableIcons"
listener="#{appEditController.iconSelectedChanged(icon)}" />
</p:selectBooleanCheckbox>
</h:panelGrid>
</p:panel>

</p:column>

</p:dataGrid>

<p:commandButton value="Done" update="currentIcon"
action="#{appEditController.updateCurrentIcon}" ajax="false"
oncomplete="iconSelect.hide()" />

</p:confirmDialog>

.......
</h:form>

我没有看到缺少什么或不正确的内容。

这是支持 bean 代码

public void updateCurrentIcon() {
for (IconVO iconVO : availableIcons) {
if (iconVO.isSelected()) {
log.debug("CURRENT ICON IS NOW " + iconVO.getIcon());

currentIcon = iconVO;

break;
}
}
}

public void iconSelectedChanged(IconVO iconVO) {


if (iconVO == currentIcon) {
log.debug("NULLING ICON");
currentIcon = null;
} else {
log.debug("SETTING NEW ICON");
currentIcon = iconVO;
}

}

public boolean isIconSelected(IconVO iconVO) {

log.debug("IS ICON SELECTED " + iconVO.getIcon());

if (currentIcon == null
|| iconVO.getIcon().equals(currentIcon.getIcon())) {
return false;
}

return currentIcon != null;
}

我尝试执行 update="@form",然后更新会触发,但它会完全关闭模式面板。

谢谢,科恩

最佳答案

事实上,PrimeFaces 通过相对客户端 ID 定位组件的方式是 changed in PrimeFaces 3.1遵守 UIComponent#findComponent() javadoc .

在您的特定情况下,您需要指定<p:dataGrid>绝对客户端ID反而。最简单的计算方法是检查 <p:dataGrid> 的 ID在生成的 HTML 源中。根据目前给出的代码,这将是 Application:availableIcons 。您需要在其前面加上前缀 :使其绝对,然后在 update 中引用它如下:

<p:ajax update=":Application:availableIcons" ... />
<小时/>

更新根据评论,事实证明根本不起作用。您可以尝试将表格包装在一些不可见的包含组件中,例如 <h:panelGroup>并更新它。或者,您可以考虑移动 <h:form>进入对话框并使用 update="@form"反而。拥有<h:form>无论如何,在对话框之外有点奇怪。您肯定不会提交同一表单内对话框之外的所有其他输入。

关于java - Primefaces 组件不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9280615/

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