3

目前在 JSF 中,包含在消息(rich:messages标记)中的所有 HTML 都被转义并仅显示为标记。例如,在我的支持 bean 中,我有:

createMessage("Title created successfully with product number: <a href=\"http://www.example.com\">" + product.getProductNumber() + "</a>.");

wherecreateMessage()只是一个辅助函数,它将新消息添加到 faces 上下文,然后可以在我的rich:messages标签中查看。

创建此消息后,我的消息仅显示转义的 HTML:

Title created successfully with product number: <a href="http://www.example.com">1234</a>.

有什么办法可以避免这种情况,而只是在消息中提供一个实际链接?

提前致谢

〜扎克

4

3 回答 3

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>
于 2009-05-06T13:57:21.743 回答
2

听起来您需要创建自己的rich:messages具有escape属性的版本,例如h:outputText,因此您可以禁用 HTML 转义。

于 2009-05-05T22:44:12.420 回答
0

如果您使用的是 jquery,则可以取消转义 xml 字符:

<script type="text/javascript">
         //<![CDATA[
        $(document).ready(function() {
            $(".esc").each(function(i) {
                var h = $(this).html();                
                h = h.replace(/&lt;/gi, "<");
                h = h.replace(/&gt;/gi, ">");
                $(this).html(h);
            });
        });
        //]]> 
     </script>
于 2009-11-11T19:25:40.490 回答