【问题标题】:Iterate <f:verbatim> within <ui:repeat>在 <ui:repeat> 中迭代 <f:verbatim>
【发布时间】:2011-08-02 13:21:45
【问题描述】:

我有一个 @ViewScoped bean 和一个包含纯 HTML 的 List&lt;String&gt;。我想遍历这个列表并输出纯 html:

<c:forEach items="#{bean.list}" var="html">
  <f:verbatim>#{html}</f:verbatim>
</c:forEach>

上面的 sn-p 效果很好,但是当刷新页面时,bean costrunctor 会被调用。此问题/错误已知:JSTL c:forEach causes @ViewScoped bean to invoke @PostConstruct on every request

因此建议将&lt;c:forEach&gt; 替换为&lt;ui:repeat&gt;

<ui:repeat value="#{bean.list}" var="html">
  <f:verbatim>#{html}</f:verbatim>
</ui:repeat>

但这不起作用。我有一个空白页。我尝试了&lt;h:dataTable&gt;&lt;a4j:repeat&gt;&lt;rich:dataTable&gt;,但无事可做。

有什么解决办法吗?

【问题讨论】:

    标签: java jsf jsf-2 facelets


    【解决方案1】:

    为什么不使用ViewScoped 数据模型?

    在 JEE5 (JSF 1.2) 中 - 可以是接缝管理的 @Factory("bean.list") List&lt;&gt; produceList()... 它将是视图范围的(实际上是页面范围的)。

    在 JEE6 (JSF 2.0) 中,您可以使用与 CDI 相同的模式。

    或者您可以为您的列表实施相同的生命周期并创建自己的解决方案。

    【讨论】:

    • 请扩展这个答案,它很模糊。
    【解决方案2】:

    请改用&lt;h:outputText escape="false"&gt;

    <ui:repeat value="#{bean.list}" var="html">
        <h:outputText value="#{html}" escape="false" />
    </ui:repeat>
    

    &lt;f:verbatim&gt; 是一个旧的面向 JSP 的标记,旨在能够在 JSF 1.0/1.1 的 JSF 组件中嵌入纯 HTML。没有它,否则所有纯 HTML 都将在 JSF 组件树之前呈现。这种不直观的行为在 JSF 1.2 中得到修复,这使得标记变得多余。在 Facelets 中它也是多余的,在 Facelets 2.0(对于 JSF 2.0)中它甚至被弃用。另请参阅tag documentation 的介绍性文字。不要使用它。如果您想呈现未转义的 HTML,请按照上面示例中的建议使用 &lt;h:outputText escape="false"&gt;。如果您想有条件地渲染内联 HTML 片段,请改用 &lt;h:panelGroup&gt;&lt;ui:fragment&gt;

    【讨论】:

    • 我很好奇为什么会有所作为? f:verbatimh:outputText 都是组件(与标签处理程序相反),不是吗?
    • @meridon:在 JSP 中是的,但在 Facelets 中不是。查看更新的答案。
    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2013-03-21
    • 2013-12-08
    相关资源
    最近更新 更多