Java读取含HTML <strong>标签的数据库字符串,在JSF组件中无法正确渲染粗体的问题求助
Java读取含HTML 标签的数据库字符串,在JSF组件中无法正确渲染粗体的问题求助
嗨,我来帮你搞定这个问题!你的核心困扰其实是JSF的默认安全机制在搞鬼——JSF为了防止XSS攻击,会自动把EL表达式输出内容里的特殊字符(比如<、>)转成HTML实体(<、>),所以你的<strong>标签被当成纯文本显示了,浏览器根本不会把它解析成粗体格式。
之前你手动替换<>为<、>反而会导致双重转义,结果浏览器显示的就是转义后的实体字符,自然还是看不到粗体效果。
下面给你两种场景的具体解决办法:
1. 普通HTML标签(比如你用的<p>)里渲染带HTML的字符串
不要直接写#{MyClass.paraFromDb},改用JSF的<h:outputText>组件,并且设置escape="false"来关闭自动转义:
<p><h:outputText value="#{MyClass.paraFromDb}" escape="false" /></p>
2. 在PrimeFaces Galleria组件里渲染带HTML的描述
同样用<h:outputText>包裹你的#{image.description},加上escape="false":
<p:galleria value="#{galleriaBean.images}" var="image" panelWidth="500" panelHeight="313" transitionInterval="5000" circular="true" autoPlay="true"> <p:graphicImage name="img/#{image.name}" alt="Image Description for #{image.name}" title="#{image.name}"/> <h:outputText value="#{image.description}" escape="false" /> </p:galleria>
⚠️ 重要提醒:如果image.description的内容是来自用户输入的,一定要做好XSS防护!比如过滤掉<script>、<iframe>这类危险的HTML标签,只保留<strong>、<em>这类安全的格式标签,避免恶意代码注入到页面里。
备注:内容来源于stack exchange,提问作者prain99
相关产品推荐
相关产品推荐

