JSF 不输出非严格 html
我需要输出存储在数据库中的html文本。文本由富编辑器生成,因此包含格式错误的 html(非闭合标签,如
)。所以我有如何将其打印在页面上的问题。
如果我使用:
#{document.content}
它打印转义的html文档,并且所有标签都显示在页面上(代码本身包含“& lt;”而不是<)
可见的解决方案-使用 h:outputText 和 escape="false:
<h:outputText value="#{document.content}" escape="false" />
但它只打印 html,直到它是良好的 xml 格式:文本在第一个
标记处停止 似乎,JSF 解析 document.content 的内容并在无法解析时停止。我真的不需要 JSF 来解析内容,只是输出
以下代码也没有帮助:
<h:outputText value="lt![CDATA[#{document.content}]]gt" escape="false" />
I need to output the html text, which is stored in database. The text is generated by the rich editor, so contains bad-formed html (non-closed tags like <br>
). So I have the problem how to print it on the page.
If I use:
#{document.content}
It prints the escaped html document, and all tags are displayed on the page (the code itself contains "& lt;" instead of <)
The visible solution - to use h:outputText with escape="false:
<h:outputText value="#{document.content}" escape="false" />
But it prints the html only until it is well-xml-formed: the text is stopped on the first <br>
tag. Seems, JSF parses the content of the document.content and stops when cannot do it. I don't really need JSF to parse the content, simply output!
The following code didn't help either:
<h:outputText value="lt![CDATA[#{document.content}]]gt" escape="false" />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,这似乎是 Chrome 错误。在我将 DOCTYPE 更改为 html transitive 后,它显示“实体'nbsp'未定义”错误,并且没有呈现内容。但在其他浏览器中一切都呈现正常!即使我将 DOCTYPE 回滚到 xhtml strict - Firefox 和 Opera 也完美地显示了内容,并且不太关注格式错误的 html!
没有深入研究,但这在某种程度上与 Chrome 引擎 Webkit 相关。
更新:使用 f:view contentType="text/html" >这样在 Chrome 和 Safari 中就可以正常工作了。
希望这会帮助其他人
Ok, that seemed to be Chrome error. After I changed DOCTYPE to html transitive it showed "Entity ‘nbsp’ not defined" error and didn't render the content. But in other browsers everything rendered ok! Even after I rollbacked the DOCTYPE to xhtml strict - Firefox and Opera displayed the content perfectly and didn't pay much attention to bad-formed html!
Didn't dive deep, but this is somehow linked with Webkit - the engine for Chrome.
Update: use < f:view contentType="text/html" > so that this worked ok in Chrome and Safari.
Hope this will help anyone else