HTML对象作为JSF UIComponent

HTML对象作为JSF UIComponent,jsf,primefaces,tabview,uicomponents,Jsf,Primefaces,Tabview,Uicomponents,我有一个选项卡视图,我使用它生成选项卡: <p:tabView> <c:forEach var="app" items="#{data.apps}"> <p:tab title="#{app.name}" closable="true" id="app_#{app.id}"> <object data="#{app.startUri}" height="800" width="1150" />

我有一个选项卡视图,我使用它生成选项卡:

<p:tabView>
    <c:forEach var="app" items="#{data.apps}">
        <p:tab title="#{app.name}" closable="true" id="app_#{app.id}">
            <object data="#{app.startUri}" height="800" width="1150" />
        </p:tab>
    </c:forEach>
</p:tabView>
但是,我在添加新选项卡时遇到了问题。我必须更新选项卡视图,这导致选项卡及其内容重新加载,这对我来说是个问题

然后,我切换到使用TabViewHelper bean创建我的TabView

但是,将对象标记作为子项添加到选项卡时出现问题:

public TabView initializeTabView(List<App> apps) {
    tv = new TabView();
    Tab tab;
    for (App app : apps) {
        tab = new Tab();
        tab.setTitle(app.getName());
        HTMLObjectElementImpl content = new HTMLObjectElementImpl(owner, "test-object");
        tab.getChildren().add(content);
    tv.getChildren().add(tab);
    }
    return tv;
}
我得到以下错误:

类型列表中的方法addUIComponent不适用于参数HTMLObjectElementImpl

我只能添加一个UIComponent

我不确定HTMLObjectElementImpl是否适合,但我没有找到更好的

HTML标记是否有UIComponent,或者是否有其他类可用于HTML

是否有其他人有这个问题并找到了解决方案?

不是JSF组件。它基本上被认为是纯文本

最简单的方法是创建一个转义设置为false的

当心XSS攻击漏洞,以防将用户控制的变量传递给该漏洞


将来,您将尝试以编程方式创建JSF组件,使用的是的子类,而不是一些随机的JAXP实现特定类。或者,更好的办法是修复更新问题,这样您就可以继续使用XHTML代码来创建视图,而不是使用冗长的Java代码。

但是,在更新时,您也会遇到同样的问题……您只是将简单的XHTML转换为复杂的Java。PF tabs不支持“在不重新加载所有其他选项卡的情况下在运行时动态添加选项卡”@Kukeltje使用tv.getChildren.addtab可以轻松地动态添加选项卡。这对我来说很好。是的,但是为了使它可见,你必须呈现整个选项卡视图,包括所有其他选项卡。这就是我在先前的评论中所说的。我知道这里说你不能添加标签。谢谢你的帮助!HtmlOutText运行良好
HtmlOutputText html = new HtmlOutputText();
html.setEscape(false);
html.setValue("<object>...</object>");