繁体   English   中英

Primefaces组件不会更新

[英]Primefaces component does not update

我有ap:dataGrid,它曾经在3.0.1中进行更新。 现在,我已升级到PF 3.1,并且“ availableIcons”组件的ajax更新事件不再触发。 我没有看到在视图中找不到该组件的错误。

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 3.1中已经更改了PrimeFaces通过相对客户端ID定位组件的方式,以遵循UIComponent#findComponent() javadoc的方式

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM