JavaEE 7 JSF 2.2の超簡単カスタムコンポーネント
2.2ではカスタムコンポーネントをすぐに作成、実装することができる。
XMLとかなにもいらない。
やっと来たかーって感じ。
カスタムコンポーネントのコード。
package jsf; import java.io.IOException; import javax.faces.component.FacesComponent; import javax.faces.component.UIComponentBase; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; @FacesComponent(value = "custom.aoi_blink" ,tagName = "aoi_blink" , createTag = true) public class Blink extends UIComponentBase{ @Override public String getFamily() { return "com.example.blink"; } @Override public void encodeBegin(FacesContext context) throws IOException { ResponseWriter rw = context.getResponseWriter(); rw.write("<span style='color:blue;text-decoration:blink;'>"); } @Override public void encodeEnd(FacesContext context) throws IOException { ResponseWriter rw = context.getResponseWriter(); rw.write("</span>"); } }
テンプレート。
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsf="http://xmlns.jcp.org/jsf" xmlns:hoge="http://xmlns.jcp.org/jsf/component"> <head jsf:id="head"> <title>JSF 2.2ですね</title> </head> <body jsf:id="body"> <hoge:aoi_blink>青いブリンク</hoge:aoi_blink> </body> </html>
実行結果は以下の通り。
<?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="head"> <title>JSF 2.2ですね</title> </head> <body id="body"> <span style='color:blue;text-decoration:blink;'>青いブリンク</span> </body> </html>
ポイントは@FacesComponentアノテーション。
2.0では名前となるvalueしかなかったが、2.2ではいろいろと増えている。
tagName要素はなければクラス名の先頭を小文字にしたものが有効となる。
createTag要素がポイント。これをtrueにするだけでタグの設定がいらなくなる。省略はfalseで従来通り。
namespace要素はxmlnsで指定できるもの。デフォルトは「http://xmlns.jcp.org/jsf/component」。
というわけで、カスタムコンポーネントを利用するのに必要なものはなくなった。
この2つの手順だけである。
Firefox以外では実行結果がおもしろくないので注意です。
ちなみにNetBeansではカスタムコンポーネントのクラスを作るとカスタムコンポーネントの補完もきくようになるので楽々開発できる。