我有一个@ViewScoped
豆与一个List<String>
包含纯 HTML。我想迭代这个列表并输出纯 html:
<c:forEach items="#{bean.list}" var="html">
<f:verbatim>#{html}</f:verbatim>
</c:forEach>
上面的代码片段运行良好,但是当刷新页面时,bean 成本运行器会被调用。此问题/错误是已知的:JSTL c:forEach 导致 @ViewScoped bean 在每个请求上调用 @PostConstruct https://stackoverflow.com/questions/2842401/jstl-cforeach-causes-viewscoped-bean-to-invoke-postconstruct-on-every-request
所以建议是更换<c:forEach>
with <ui:repeat>
.
<ui:repeat value="#{bean.list}" var="html">
<f:verbatim>#{html}</f:verbatim>
</ui:repeat>
但这是行不通的。我有一个空白页。我试过<h:dataTable>
, <a4j:repeat>
and <rich:dataTable>
但无事可做。
有什么解决办法吗?
Use <h:outputText escape="false">
反而。
<ui:repeat value="#{bean.list}" var="html">
<h:outputText value="#{html}" escape="false" />
</ui:repeat>
The <f:verbatim>
是一个旧的面向 JSP 的标签,旨在能够在 JSF 1.0/1.1 中的 JSF 组件中嵌入纯 HTML。没有它,所有纯 HTML 都会被渲染beforeJSF 组件树。这种不直观的行为在 JSF 1.2 中得到了修复,这使得标签变得多余。在 Facelets 中它也是多余的,在 Facelets 2.0(对于 JSF 2.0)中它甚至是多余的已弃用。另请参阅 的介绍性文字标签文档 http://download.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/f/verbatim.html。不要使用它。如果您想呈现未转义的 HTML,请使用<h:outputText escape="false">
正如上面例子中所建议的。如果您想有条件地渲染内联 HTML 片段,请使用<h:panelGroup>
or <ui:fragment>
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)