【问题标题】:HTML object as JSF UIComponent作为 JSF UIComponent 的 HTML 对象
【发布时间】:2015-10-03 00:48:30
【问题描述】:

我有一个 TabView,它的选项卡是通过以下方式生成的:

<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>

但是,我在添加新标签时遇到了问题。我不得不更新导致选项卡及其内容重新加载的 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;
}

我收到以下错误:

类型List中的add(UIComponent)方法不适用于参数(HTMLObjectElementImpl)

我只能添加一个 UIComponent。

我不确定 HTMLObjectElementImpl 是否适合 &lt;object&gt;,但我没有找到更好的东西。

是否有用于 HTML &lt;object&gt;-tag 的 UIComponent,或者是否有其他可用于 HTML &lt;object&gt; 的类?

有没有其他人遇到过这个问题并找到了解决方案?

【问题讨论】:

  • 你在更新时会遇到同样的问题……你只是将简单的 xhtml 转换为复杂的 java。 PF 标签只是不支持“在运行时动态添加标签而不重新加载所有其他”
  • @Kukeltje 使用tv.getChildren().add(tab) 可以轻松地动态添加选项卡。这对我很有效。
  • 是的,但要使其可见,您必须渲染整个选项卡视图,包括所有其他选项卡。这就是我在之前的评论中所说的。我知道这里说过你不能添加标签。

标签: jsf primefaces tabview uicomponents


【解决方案1】:

&lt;object&gt; 不是 JSF 组件。它基本上被认为是纯文本。

最简单的方法是创建一个HtmlOutputText,并将escape 设置为false

HtmlOutputText html = new HtmlOutputText();
html.setEscape(false);
html.setValue("<object>...</object>");

如果您将用户控制的变量传递给 XSS 攻击漏洞,请小心。

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

【讨论】:

  • 感谢您的帮助! HtmlOutputText 运行良好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2011-10-31
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多