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

时间:2012-08-27 17:58:26

标签: java jsf jsf-2

我正在研究使用延迟加载的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;
        }
    }

我注意到一个非常奇怪的错误。我有三个选项卡:区域,HVAC,ISP。如果我单击选项卡时有相同的jsf页面,将打开具有相同名称的JSF页面。你能帮我解决这个错误吗?

1 个答案:

答案 0 :(得分:2)

你的问题并不完全清楚,但是我会建议你使用ui:repeatUI Repeat Tutorial)进行迭代,并确保你没有使用{{{ 1}}用于Ajax的bean。改为使用@RequestScoped bean。