目前在JSF中,消息(rich:messages
标记)中包含的所有HTML都被转义并显示为标记。例如,在我的支持bean中,我有:
createMessage("Title created successfully with product number: <a href=\"http://www.example.com\">" + product.getProductNumber() + "</a>.");
其中createMessage()
只是一个辅助函数,可以向faces上下文添加一条新消息,然后可以在rich:messages
标记中查看。
创建此消息后,我的消息只会显示转义的HTML:
Title created successfully with product number: <a href="http://www.example.com">1234</a>.
有没有办法避免这种情况,只是在邮件中提供实际链接?
提前致谢
〜扎克
答案 0 :(得分:3)
快速解决方案是创建一个新的渲染器。
我为 h:messages 做了这个,因为我想将不同严重性的消息分成不同的div。如果您从不想使用默认渲染器,那么这是一个不错的选择。
您要覆盖/扩展的标准类是:
public class MessagesRenderer extends HtmlBasicRenderer
您只需使用不会转义文本的ResponseWriter。具体类是HtmlResponseWriter,用于转义文本。您可以扩展它并覆盖
public void writeText(Object text, String componentPropertyName)
因此它不使用HtmlUtils。
然后只需将新渲染器添加到faces-config.xml
<render-kit>
<renderer>
<component-family>javax.faces.Messages</component-family>
<renderer-type>javax.faces.Messages</renderer-type>
<renderer-class>com.mypackage.MessagesRenderer</renderer-class>
</renderer>
</render-kit>
答案 1 :(得分:2)
听起来您需要创建自己的rich:messages
版本,其escape
属性为h:outputText
,因此您可以停用HTML转义功能。
答案 2 :(得分:0)
如果您正在使用jquery,则可以取消xml字符:
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
$(".esc").each(function(i) {
var h = $(this).html();
h = h.replace(/</gi, "<");
h = h.replace(/>/gi, ">");
$(this).html(h);
});
});
//]]>
</script>