2011-01-10 6 views
4

Wir haben den Anwendungsfall, dass wir Text ausgeben müssen, der eine Kombination aus statischem Text und dynamischen Werten aus der Datenbank ist. Der vollständige Text wird mithilfe von Nachrichteneigenschaften mit sprachspezifischen statischen Textblöcken aufgelöst.Gibt es eine Standard-JSF-Methode oder Open Source-Bibliothek, die die Ausgabe von maskiertem Text, aber _mit_HTML-Formatierung ermöglicht?

Wir müssen den Ausgabetext umgehen, um XSS-Angriffe zu verhindern.

jedoch auch auf die vollständige Zeichenfolge Formatierung anwenden müssen wir zum Beispiel:

Hello <b>{username}</b>!

Dies ist ein Pseudo-Syntax ist natürlich, {username} eine Variable mit dem realen Benutzernamen ersetzt werden, die andere Der Text ist statisch und in einer Nachrichteneigenschaft definiert (z. B .: "Helloy <b>{0}</b>!").

Ein normaler JSF outputText funktioniert nicht, da er entweder alles oder nichts entkommt und unsere Formatierung zerstört.

Beachten Sie, dass wir aus diesen Fragmenten auch keine "echte" JSF-Komponente machen können, da die Position und Reihenfolge der Variablenfelder sprachabhängig ist (unterschiedliche Wortreihenfolge in Deutsch vs. Englisch).

Naht hat diese Komponente formattedText, die damit befasst ist und eine elegante Lösung hat. Seam verwenden wir jedoch nicht (und können nicht) in unserer App.

Gibt es ähnliche Ansätze/Bibliotheken?

Antwort

2

Nur JSTL fn:escapeXml auf Ausgangsparameter anwenden.

<h:outputFormat value="#{text['generic.welcome']}" escape="false"> 
    <f:param value="#{fn:escapeXml(user.name)}" /> 
</h:outputFormat>