Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html jsf消息:添加链接_Html_Jsf_Richfaces - Fatal编程技术网

Html jsf消息:添加链接

Html jsf消息:添加链接,html,jsf,richfaces,Html,Jsf,Richfaces,目前在JSF中,消息(rich:messagestag)中包含的所有HTML都被转义并显示为标记。例如,在我的支持bean中,我有: createMessage("Title created successfully with product number: <a href=\"http://www.example.com\">" + product.getProductNumber() + "</a>."); 有没有办法避免这种情况,而只是在消息中提供一个实际的链接

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

createMessage("Title created successfully with product number: <a href=\"http://www.example.com\">" + product.getProductNumber() + "</a>.");
有没有办法避免这种情况,而只是在消息中提供一个实际的链接

提前谢谢


~Zack

听起来您需要创建自己版本的
rich:messages
,它具有
escape
属性,比如
h:outputText
,这样您就可以禁用HTML转义了。

一个快速解决方案是创建一个新的渲染器

我为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>

javax.faces.Messages
javax.faces.Messages
com.mypackage.messagesrender

如果使用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>

// 

不错。供将来参考:一年后,完整代码的相同方法发布在。
<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>