p:更新后的treeTable子节点根节点重复

时间:2016-09-08 06:21:55

标签: jsf jsf-2 primefaces treetable

当我尝试使用h:panelGroup ajax事件中的p:treeTable更新p:tree时,我发现了一种奇怪的行为。

我有一个p:tree元素根据ui:include片段更新表单。在第一次加载时,一切正常,但是,当我选择一个树时,会触发ajax事件,更新p:treeTable但是节点是重复的。

我的树是这样的,选择监听器事件(onNodeSelect)构建一个p:treeNode变量,并更新一个标志以显示p:treeTable页面:

<p:tree value="#{mbArquitectura.raiz}" style="border: none;"
        dynamic="true" 
        selectionMode="single" 
        cache="false"
        selection="#{mbArquitectura.selectedNode}" 
        var="node" 
        id="tree">

    <p:ajax onstart="muestraLoader(); cleanPriceTreeTable();"
            oncomplete="ocultaLoader(); removeDuplicatedIds();"
            event="select" 
            listener="#{mbArquitectura.onNodeSelect}"
            global="true"
            update=":frmPromocion :frmPromocion:ttPrecio :panelDialogos" />

    <p:ajax onstart="muestraLoader();" oncomplete="ocultaLoader();"
            event="expand" 
            listener="#{mbArquitectura.nodeExpand}"
            global="true"
            update=":frmPromocion :frmPromocion:ttPrecio :panelDialogos" />

    <p:ajax onstart="muestraLoader();" oncomplete="ocultaLoader();"
            event="collapse" 
            listener="#{mbArquitectura.nodeCollapse}"
            global="true"
            update=":frmPromocion :frmPromocion:ttPrecio :panelDialogos" />

    <p:treeNode id="treeNode">
        <b>
            <h:outputText value="#{node}" id="lblNode" style="color: #{node.label}" />
        </b>
    </p:treeNode>
</p:tree>

我的更新表单(:frmPromocion)是:

<ui:define name="content" id="content">
    <h:form id="frmPromocion" style="font-size: x-small">
        <h:panelGroup rendered="#{mbArquitectura.agregarPromocion}">
            <ui:include src="/pages/ArqSeven/ArqPromocion.xhtml" />
        </h:panelGroup>
        <h:panelGroup rendered="#{mbArquitectura.precio}">
            <ui:include src="/pages/ArqSeven/ArqPrecio.xhtml" />
        </h:panelGroup>
    </h:form>

在文件ArqPecio.xhtml内,有以下dataTable:

<p:treeTable id="ttPrecio" 
             liveResize="true"
             value="${mbArquitectura.raizPrecio}" 
             var="item" 
             style="width: 1200px;" 
             styleClass="grid-content">

    <p:ajax event="expand" listener="#{mbArquitectura.priceExpand}" update=":frmPromocion:ttPrecio" />
    <p:ajax event="collapse" listener="#{mbArquitectura.priceCollapse}" update=":frmPromocion:ttPrecio" />
    <p:ajax event="select" listener="#{mbArquitectura.priceSelect}" update=":frmPromocion:ttPrecio" />
    <p:ajax event="unselect" listener="#{mbArquitectura.priceUnselect}" update=":frmPromocion:ttPrecio" />
</p:treetable>

正如我所说,内部负载工作正常:

first load

但是,当我从树中选择一个节点时,p:treeTable节点是重复的,如下所示:

duplicated nodes

如何解决此问题?

0 个答案:

没有答案