2009-05-05 13 views
3

Derzeit in JSF ist alle HTML-Code innerhalb einer Nachricht (rich:messages Tag) Escape und nur als Markup angezeigt. Zum Beispiel in meinem Backing Bean, ich habe:JSF-Nachrichten: Hinzufügen von Link

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

wo createMessage() nur eine Hilfsfunktion ist, die eine neue Nachricht an den Gesichtern Kontext fügt hinzu und ist dann in meinem rich:messages Tag sichtbar.

Wenn diese Meldung erstellt wird, zeigt meine Nachricht einfach mit der entkam HTML up:

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

Gibt es eine Möglichkeit, dies zu vermeiden und bietet nur einen tatsächlichen Link in der Nachricht statt?

Vielen Dank im Voraus

~ Zack

Antwort

3

Eine schnelle Lösung besteht darin, einen neuen Renderer zu erstellen.

Ich habe dies für h getan: Nachrichten, als ich die Nachrichten verschiedenen Schweregrade in separate divs trennen wollte. Wenn Sie den Standard-Renderer nie verwenden möchten, ist dies eine gute Option.

Die Standard-Klasse, die Sie sich überschreiben/verlängern ist:

public class MessagesRenderer extends HtmlBasicRenderer 

würden Sie haben soeben einen ResponseWriter verwenden, die den Text nicht entkommen. Die konkrete Klasse ist der HtmlResponseWriter, der den Text entkoppelt. Sie könnten dies erweitern und die

public void writeText(Object text, String componentPropertyName) 

überschreiben, so dass es HtmlUtils nicht verwendet.

Dann einfach Ihre neuen Renderer 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

Nizza. Für zukünftige Referenz: ein Jahr später, der gleiche Ansatz mit vollem Code wurde bei [Einbetten eines Links (oder anderen HTML) in einer JSF-Nachricht] (http://stackoverflow.com/questions/3356546/embdingding-a-link- oder-andere-html-in-a-jsf-Nachricht/3358402 # 3358402). – Arjan

2

Es klingt wie Sie Ihre eigene Version von rich:messages erstellen müssen, die ein escape Attribut, wie h:outputText hat, so dass Sie HTML entkommen deaktivieren.

0

hinzufügen Wenn Sie jQuery verwenden Sie die XML-Zeichen unescape können:

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