使用primefaces p:tabView,使用p:ajax刷新选项卡并不能正常工作。第一次刷新但下次不刷新

时间:2014-11-14 13:44:29

标签: ajax primefaces tabs tree

我有一个带有tabView的页面,有3个选项卡,每个选项卡都有一个树。第三个选项卡(DEVICES CATEGORY / TYPE)的树取决于我在第二个选项卡(CERTIFICATIONS SYSTEM / PROGRAM)的树中选择的内容。当标签发生变化时,我会动态地生成第三个标签的树,使用事件" tabChange"

<p:ajax event="tabChange" listener="#{profileMB.onTabChange}" />

当我选择第二个标签树的一个元素并且我更改为第三个标签时,第一次,它可以正常,但是当我返回到第二个标签时并且我标记树的不同节点,我更改为第三个标签,第三个标签不刷新

它可以正常工作的方法,并很好地生成树。

public void onTabChange(TabChangeEvent event) {
    log.debug(Constants.BEGIN);    
    if(selectedNodesCS!=null && selectedNodesCS.length>0){        
      rootDeviceCategory =
          getDeviceCategoryService().createRootStructure(rootDeviceCategory, null,listCertSystem,listCertProgram);
    }
  }

我尝试在ajax事件中使用更新&#34; tabChange&#34;:

<p:ajax event="tabChange" listener="#{profileMB.onTabChange}" update=":formManagerProfile:tabsProfile:tabDC" />

但控制台说:

无法更新组件&#34; org.primefaces.component.tabview.Tab&#34; with id&#34; formManagerProfile:tabsProfile:tabDC&#34;没有附加渲染器

这是我的XHTML的代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:p="http://primefaces.org/ui"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">


    <h:form id="formManagerProfile" style="margin: auto auto">
        <h:panelGroup id="displayManager">

            <p:panelGrid id="panelUp" style="text-align: left;"
                styleClass="panelGridWithoutBorder">
                <p:row>
                    <p:column>
                        <h:outputText value="#{msg['profile.name']}: " for="profileName" />
                    </p:column>
                    <p:column>
                        <h:inputText id="profileName" value="#{profileMB.profileName}"
                            maxlength="64" styleClass="width-100x100" />
                    </p:column>
                </p:row>
                <p:row>
                    <p:column>
                        <h:outputText value="#{msg['profile.profileGroup']}: "
                            for="profileGroup" />
                    </p:column>
                    <p:column>
                        <p:selectOneMenu id="profileGroup"
                            value="#{profileMB.profileGroupSelected}"
                            converter="#{selectOneMenuConverterSelf}">
                            <f:selectItem itemLabel="" itemValue="#{null}" />
                            <f:selectItems id="pgSelectedItem"
                                value="#{profileMB.listProfileGroups}" var="pgItem"
                                itemValue="#{pgItem}" itemLabel="#{pgItem.name}" />
                        </p:selectOneMenu>
                    </p:column>
                    <p:column>
                        <p:commandButton id="editProfileGroup"
                            icon="#{msg['icon.update']}"
                            value="#{msg['button.text.updateProfileGroup']}"
                            title="#{msg['button.text.updateProfileGroup']}"
                            actionListener="#{profileMB.managementProfileGroup}"
                            update=":managerProfileGroupForm :growl"
                            oncomplete="PF('profileGroupManagerDialogWidget').initPosition();PF('profileGroupManagerDialogWidget').show()" />
                    </p:column>
                </p:row>
            </p:panelGrid>
            <p:panel styleClass="text_align_left">
                <p:commandButton id="saveButtonUp" icon="#{msg['icon.save']}"
                    value="#{msg['button.text.save']}"
                    title="#{msg['button.text.save']}"
                    action="#{profileMB.saveProfile}" update=":growl" />
                <p:commandButton id="backButtonUp" icon="#{msg['icon.back']}"
                    value="#{msg['button.text.back']}"
                    title="#{msg['button.text.back']}" action="#{profileMB.backAction}"
                    ajax="false" />
            </p:panel>


        </h:panelGroup>
        <h:panelGroup>
            <p:tabView id="tabsProfile" dynamic="true">
                <p:ajax event="tabChange" listener="#{profileMB.onTabChange}" />
                <p:tab id="tabMenu" title="MENUS">
                    <p:tree value="#{profileMB.rootAction}" var="elementAction"
                        selectionMode="checkbox" selection="#{profileMB.selectedNodes}">
                        <p:treeNode>
                            <h:outputText value="#{elementAction}" />
                        </p:treeNode>
                    </p:tree>

                </p:tab>
                <p:tab id="tabCS" title="CERTIFICATIONS SYSTEM/PROGRAM">
                    <p:tree id="TreeCS" value="#{profileMB.rootCertSystem}"
                        var="elementCS" selectionMode="checkbox"
                        selection="#{profileMB.selectedNodesCS}">
                        <!--                        <p:ajax event="select" listener="#{profileMB.onClickTreeCS}"   /> -->
                        <!--                        <p:ajax event="unselect" listener="#{profileMB.onClickUnSelectTreeCS}"   /> -->
                        <p:ajax async="true" delay="none" immediate="true"
                            process="TreeCS" event="select" />
                        <p:ajax async="true" delay="none" immediate="true"
                            process="TreeCS" event="unselect" />
                        <p:treeNode>
                            <h:outputText value="#{elementCS}" />
                        </p:treeNode>
                    </p:tree>
                </p:tab>
                <p:tab id="tabDC" title="DEVICES CATEGORY/TYPE">
                    <p:tree id="TreeDC" value="#{profileMB.rootDeviceCategory}"
                        var="elementDC" selectionMode="checkbox"
                        selection="#{profileMB.selectedNodesDevCat}">
                        <p:ajax event="select" listener="#{profileMB.onClickTreeDC}" />
                        <p:ajax event="unselect"
                            listener="#{profileMB.onClickUnSelectTreeDC}" />
                        <p:treeNode>
                            <h:outputText value="#{elementDC}" />
                        </p:treeNode>
                    </p:tree>
                </p:tab>
            </p:tabView>
        </h:panelGroup>
    </h:form>
</ui:composition>

我使用的是primefaces v5.1,JSF v2.2.8,spring v3.2.5,hibernate v4.2.7和java v1.7

1 个答案:

答案 0 :(得分:10)

我在p:tabView中找到了解决方案我必须使用cache =“false”