我有一个@ViewScoped
bean List<String>
包含纯 HTML。我想迭代这个列表并输出纯 html:
<c:forEach items="#{bean.list}" var="html">
<f:verbatim>#{html}</f:verbatim>
</c:forEach>
上面的代码片段运行良好,但是当刷新页面时,bean 成本运行器会被调用。此问题/错误已知:JSTL c:forEach causes @ViewScoped bean to invoke @PostConstruct on every request
所以建议替换 <c:forEach>
与 <ui:repeat>
.
<ui:repeat value="#{bean.list}" var="html">
<f:verbatim>#{html}</f:verbatim>
</ui:repeat>
但这行不通。我有一个空白页。我试过<h:dataTable>
, <a4j:repeat>
和<rich:dataTable>
但无事可做。
有什么解决办法吗?
最佳答案
使用<h:outputText escape="false">
相反。
<ui:repeat value="#{bean.list}" var="html">
<h:outputText value="#{html}" escape="false" />
</ui:repeat>
<f:verbatim>
是一个旧的面向 JSP 的标签,旨在能够在 JSF 1.0/1.1 中的 JSF 组件中嵌入纯 HTML。如果没有它,所有纯 HTML 都将在 JSF 组件树之前呈现。这种不直观的行为在 JSF 1.2 中得到了修复,这使得标签变得多余。在 Facelets 中,它也是多余的,在 Facelets 2.0(对于 JSF 2.0)中,它甚至被弃用。另请参阅 tag documentation 的介绍性文字。不要使用它。如果您想呈现未转义的 HTML,请使用 <h:outputText escape="false">
如上面示例中所建议的。如果您想有条件地渲染内联 HTML 片段,请使用 <h:panelGroup>
或<ui:fragment>
相反。
关于java - 迭代 <f :verbatim> within <ui:repeat>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5613117/