Java 如何使用列表生成选项卡

Java 如何使用列表生成选项卡,java,jsf,jsf-2,primefaces,Java,Jsf,Jsf 2,Primefaces,我想用Java列表生成p:tabView。这是迄今为止我测试过的代码: JSF页面: <p:tabView value="#{bean.tabs}" var="listItem"> <p:tab title="#{listItem.tabid}"> ` <ui:include src="#{listItem.tabfilename}" /> </p:tab> </p:tabView> ` 托管bea

我想用Java列表生成
p:tabView
。这是迄今为止我测试过的代码:

JSF页面:

<p:tabView value="#{bean.tabs}" var="listItem">

    <p:tab title="#{listItem.tabid}">

`   <ui:include src="#{listItem.tabfilename}" />

    </p:tab>
</p:tabView>

`   
托管bean:

List<TabObject> tabs = new ArrayList<>();

    @PostConstruct
    public void init() {
        tabs.add(new TabObject("tab1.xhtml", "General"));
        tabs.add(new TabObject("tab2.xhtml", "History"));

    }

    public class TabObject {

        String tabfilename;
        String tabid;

        public TabObject(String tabfilename, String tabid) {
            super();
            this.tabfilename = tabfilename;
            this.tabid = 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 List<TabObject> getTabs() {
        return tabs;
    }
List tabs=new ArrayList();
@施工后
公共void init(){
添加(新的TabObject(“tab1.xhtml”、“General”);
添加(新的TabObject(“tab2.xhtml”、“History”);
}
公共类TabObject{
字符串选项卡文件名;
字符串tabid;
公共TabObject(字符串tabfilename,字符串tabid){
超级();
this.tabfilename=tabfilename;
this.tabid=tabid;
}
公共字符串getTabfilename(){
返回tabfilename;
}
public void setTabfilename(字符串tabfilename){
this.tabfilename=tabfilename;
}
公共字符串getTabid(){
返回tabid;
}
公共void setTabid(字符串tabid){
this.tabid=tabid;
}        
}
公共列表getTabs(){
返回标签;
}
但出于某种原因,它不起作用。我可以看到生成的选项卡标题,但选项卡主体为空。你能帮我修改代码吗

更新:

简单的选项卡工作得非常好:

<p:tabView dynamic="true" cache="false">
    <p:tab id="tab1" title="General" >
        <ui:include src="tab1.xhtml" />
    </p:tab>
    <p:tab id="tab2" title="Group Accounts" >
        <ui:include src="tab2.xhtml" />
    </p:tab>   
    <p:tab id="tab3" title="History" >
        <ui:include src="tab3.xhtml" />
    </p:tab>
</p:tabView>

我认为这是你的能手。它采用get(国会信件)惯例。
将它们更改为支持bean上的getTabfilename、setTabfilename等。

您能否尝试以下操作以确认您从支持bean获得了预期的回报?将选项卡声明替换为。由于您说过选项卡显示的标题正确,现在它们应该显示您试图包含的文件的名称。它们是否显示正确的文件名?请您也更新问题中的代码以反映您所做的更改?那么您是否能够确认正确的TabFileName是从支持bean返回的?很抱歉延迟。又一次,它不起作用了。我更改了代码-当我打印内容时,我可以看到适当的文件名,但由于某些原因,它无法工作。好的,听起来你的支持bean是正确的。所以现在看来问题可能是找不到要包含的文件,或者包含的代码中有错误。当您切换回代码时,stacktrace中是否有任何错误?哇,响应非常快。不,我在Glassfish的日志或Firebug中没有发现任何错误。请首先尝试使用自定义选项卡成功(无列表-只需放置几个选项卡,其中包含
post updated。我已经对其进行了测试。好的,接受@BalusC建议并设置了一个测试环境。我假设您尝试做的事情会起作用,因为我做了类似的事情。我认为发生的情况是,由于DOM树的构建时间,您的列表迭代器是空的当它尝试执行ui:include时。因此它从不包含您的选项卡文件。它对我有效的原因是因为我没有尝试使用选项卡迭代器。我只是包含一块代码,所以我将其直接绑定到我的支持bean上的一个变量,然后根据需要对其进行更改。但这与您正在处理的问题不同。