2009-05-05 9 views
3

現在、JSFでは、メッセージ(rich:messagesタグ)に含まれるすべてのHTMLがエスケープされ、マークアップとして表示されます。例えば、私のバッキングBeanに、私が持っている:createMessage()はfacesコンテキストに新しいメッセージを追加し、私のrich:messagesタグで、次に表示できるだけのヘルパー関数ですjsf messages:リンクの追加

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

このメッセージが作成されると、私のメッセージは、単にエスケープHTMLで現れる:

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

は、この問題を回避し、だけではなく、メッセージの実際のリンクを提供する方法はありますか?事前

感謝〜ザック

答えて

3

簡単な解決策は、新しいレンダラーを作成することです。私は、別のdiv要素に異なる重大度のメッセージを分離したかったようメッセージ:

私は時間のためにこれをやりました。デフォルトのレンダラーを使用したくない場合は、それは良い選択です。あなたが/上書き延長する

標準クラスがある:あなただけのテキストをエスケープしませんResponseWriterを使用することになり

public class MessagesRenderer extends HtmlBasicRenderer 

。具体的なクラスは、テキストをエスケープするHtmlResponseWriterです。これを拡張して、HtmlUtilsを使用しないように

public void writeText(Object text, String componentPropertyName) 

を上書きすることができます。

それからちょうどあなたはjqueryのを使用している場合は、XML文字をエスケープ解除できるの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> 
+0

ニース。将来の参考資料:1年後、[JSFメッセージにリンク(または他のhtml)を埋め込む]で完全なコードを使用した同様のアプローチが投稿されました(http://stackoverflow.com/questions/3356546/embedding-a-link- or-other-html-in-a-jsf-message/3358402#3358402)。 – Arjan

2

あなたはエスケープHTMLを無効にすることができますので、h:outputTextのように、escape属性を持つrich:messagesの独自のバージョンを作成する必要があるようですね。

0

をあなたの新しいレンダラを追加します。

<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> 
関連する問題