jsf – 如何以编程方式创建标记?

我正在尝试创建一个动态TabView,其中每个选项卡都显示一个不同的xhtml页面,并提供< ui:include>的帮助.标签.

以下是我尝试执行此操作的代码段

    Tab tab= new Tab();  
    Portal portal=itr.next();
    tab.setTitle(portal.getPortal_name());
    tab.setId(portal.getPortal_name());
    /*   Code to generate <ui:include> tag
     *   and add it to tab
     */
    tabView.getChildren().add(tab);

我搜索了很多但找不到任何方法来生成< ui:include>标签.
有谁能建议这样做的方法?

最佳答案 使用
FaceletContext#includeFacelet()

FaceletContext faceletContext = (FaceletContext) FacesContext.getCurrentInstance().getAttributes().get(FaceletContext.FACELET_CONTEXT_KEY);
faceletContext.includeFacelet(tab, "include.xhtml");

请注意,在视图构建期间未运行时,此构造在MyFaces中失败.它适用于Mojarra.

与具体问题无关,您是否知道< p:tabView值>哪个可以收藏?无需以编程方式创建选项卡.另见例如How to add button for adding new tabs near last tab?

点赞