17.5. SeamTextParser の使用
<s:formattedText/> JSF コンポーネントは内部的に org.jboss.seam.text.SeamTextParser を使用します。 このクラスを直接使って独自のテキスト解析機能、 レンダリング機能、 HTML サニテーションの手順を実装することができます。 JavaScript ベースの HTML エディタなどリッチテキストの入力用にカスタムのフロントエンドインターフェースがある場合、 クロスサイトスクリプティング (XSS) 攻撃から防御する目的でユーザーの入力を確認する場合に便利です。 またカスタムの Wiki テキスト解析やレンダリングエンジンとしても使用できます。
次の例ではカスタムのテキストパーサを定義しています。 これはデフォルトの HTML サニタイザーを無効にします。
public class MyTextParser extends SeamTextParser {
public MyTextParser(String myText) {
super(new SeamTextLexer(new StringReader(myText)));
setSanitizer(
new DefaultSanitizer() {
@Override
public void validateHtmlElement(Token element) throws SemanticException {
// TODO: I want to validate HTML elements myself!
}
}
);
}
// Customizes rendering of Seam text links such as [Some Text=>http://example.com]
@Override
protected String linkTag(String descriptionText, String linkText) {
return "<a href=\"" + linkText + "\">My Custom Link: " +
descriptionText + "</a>";
}
// Renders a <p> or equivalent tag
@Override
protected String paragraphOpenTag() {
return "<p class=\"myCustomStyle\">";
}
public void parse() throws ANTLRException {
startRule();
}
}
linkTag() と paragraphOpenTag() メソッドは、レンダリングされた出力をカスタマイズするために無効にすることができる 2 種類のメソッドです。 これらのメソッドは通常、 String 出力を返します。 詳細については Java ドキュメントを参照してください。 org.jboss.seam.text.SeamTextParser.DefaultSanitizer Java ドキュメントには HTML のエレメント、 属性、 デフォルトでフィルタされる属性値などの詳細も記載されています。