使用延迟加载时JSF选项卡中的错误



我正在研究使用延迟加载的JSF选项卡示例:

<h:form prependId="false">
    <h:panelGroup id="tabs" layout="block">
        <ul>
            <c:forEach items="#{DatacenterProfileController.tabs}" var="tab">
                <li><a href="##{tab.tabid}" onclick="$('#button_#{tab.tabid}').click()">#{tab.tabid}</a></li>
                <h:commandButton id="button_#{tab.tabid}" value="TabClick" action="#{DatacenterProfileController.switchPages(tab.tabid)}" style="display:none">
                    <f:ajax render="tabs"></f:ajax>
                </h:commandButton>  
            </c:forEach>
        </ul>
        <c:forEach items="#{DatacenterProfileController.tabs}" var="tab">
            <h:panelGroup id="#{tab.tabid}" layout="block" rendered="#{tab.tabid eq DatacenterProfileController.selectedTab}">
                <ui:include src="#{tab.tabfilename}"></ui:include>
            </h:panelGroup>
        </c:forEach>
    </h:panelGroup>
</h:form>
List<TabObject> tabs = new ArrayList<>();
    @PostConstruct
    public void init() {
        tabs.add(new TabObject("DCProfileTabZones.xhtml", "Zones"));
        tabs.add(new TabObject("DCProfileTabHVAC.xhtml", "HVAC"));
        tabs.add(new TabObject("DCProfileTabISPs.xhtml", "ISPs"));
    }
    String selectedTab = "Zones";
    public String getSelectedTab() {
        return selectedTab;
    }
    public void setSelectedTab(String selectedTab) {
        this.selectedTab = selectedTab;
    }
    public String switchPages(String selTab) {
        selectedTab = selTab;
        return selectedTab;
    }

    public List<TabObject> gettabs() {
        return tabs;
    }
    public void setTabs(List<TabObject> tabs) {
        this.tabs = tabs;
    }

    public class TabObject {
        String tabfilename;
        String tabid;
        public String gettabfilename() {
            return tabfilename;
        }
        public void settabfilename(String tabfilename) {
            this.tabfilename = tabfilename;
        }
        public String getTabid() {
            return tabid;
        }
        public void settabid(String tabid) {
            this.tabid = tabid;
        }
        public TabObject(String tabfilename, String tabid) {
            super();
            this.tabfilename = tabfilename;
            this.tabid = tabid;
        }
    }

我注意到一个非常奇怪的虫子。我有三个选项卡:区域、暖通空调、ISP。如果我在单击选项卡时有相同的jsf页面,那么将打开具有相同名称的jsf页面。你能帮我修复这个bug吗?

您的问题还不完全清楚,但我会冒险建议您在迭代中使用ui:repeat(UI Repeat Tutorial),并确保您的Ajax没有使用@RequestScoped bean。请改用@ViewScoped bean。

相关内容

最新更新