jsf消息:添加链接

时间:2009-05-05 13:59:11

标签: html jsf richfaces

目前在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>.

有没有办法避免这种情况,只是在邮件中提供实际链接?

提前致谢

〜扎克

3 个答案:

答案 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(/&lt;/gi, "<");
                h = h.replace(/&gt;/gi, ">");
                $(this).html(h);
            });
        });
        //]]> 
     </script>