-1

遅延読み込みを使用する 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 の 3 つのタブがあります。タブをクリックしたときに同じjsfページがある場合、同じ名前のJSFページが開きます。このバグを修正するのを手伝ってもらえますか?

4

1 に答える 1

2

あなたの質問は完全に明確ではありませんが、私は手足に出て、反復にui:repeat( UI Repeat Tutorial ) を使用し@RequestScoped、Ajax に Bean を使用していないことを確認することをお勧めします。@ViewScoped代わりに豆を使用してください。

于 2012-08-28T04:57:38.037 に答える