読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

JSFサポートライブラリのOmniFaces

OmniFaces JSF

JSFを利用していて、海外のStackOverflowをよく見る方はご存じだと思うのですが、回答の常連となっているBalusCさんというJSFマスターがいます。

で、この方が作られたOmniFacesというJSFのサポートライブラリがあるのですが、今回の開発で使ってみることにしました。

omnifaces.org

サイトの副題になっている「To make JSF life easier」って表現いいですね。JSFライフは辛いときもあるので…。

具体的にどんな機能が揃っているのか?は以下のshowcaseで確認できます。

OmniFaces Showcase

なお、OmniFacesの概要や誕生経緯とかについては以下翻訳でわかりやすくまとまっています。
www.infoq.com

ここにも書いてありますが、PrimeFacesやRichFaces等のJSFリッチコンポ―ネントライブラリとバッティングするようなものではなく、併用して使える支援ライブラリです。ライセンスはApache License 2.0。

OmniFaces自体はあまり大きいプロジェクトではなく、わりと個人寄りなライブラリなので、採用判断は選ぶ方におまかせ…です(^^;

で、どんなことができる?というところで、わかりやすい所を挙げてみます。

JSF使っているとFacesContextを使う機会が多いと思いますが、普通に書くと長いですよね(^^;

//nullチェック
if(FacesContext.getCurrentInstance() != null){            
    //web.xmlで定義したContextParamを取るとき
    String hoge = FacesContext.getCurrentInstance().getExternalContext().getInitParameter("hoge");

    //ProjectStage取得
    ProjectStage ps = FacesContext.getCurrentInstance().getApplication().getProjectStage();

    //先日のブログで書いたEL評価 http://kikutaro777.hatenablog.com/entry/2015/03/04/203233
    boolean beanChecked = FacesContext.getCurrentInstance().getApplication().evaluateExpressionGet(FacesContext.getCurrentInstance(), "#{hogeBean.checked}", boolean.class);

    //その後の処理は略
}

自分でFacesContext用にWrapper/Helperクラスみたいなの作ってる人も多いかと思います。

上記と同じ処理がOmniFaces使うと以下のように書けます。

if(Faces.hasContext()){
    String hoge = Faces.getInitParameter("hoge");
    ProjectStage ps = Faces.getApplication().getProjectStage();
    boolean beanChecked = Faces.evaluateExpressionGet("#{hogeBean.checked}");

    //その後の処理は略
}

OmniFacesのFaces.javaのコードをみると

omnifaces/Faces.java at 2.0 · omnifaces/omnifaces · GitHub

各々ショートカット的に呼べるようにラップしてるだけなんですが。

あと内部的にFacesLocalというのを持っていて、毎回毎回getCurrentInstance()を呼ぶコストを下げているようです。

FacesLocal (OmniFaces 2.0-SNAPSHOT API)

Maven使っていれば以下定義をpom.xmlに追加するだけで使えます。

<dependency>
    <groupId>org.omnifaces</groupId>
    <artifactId>omnifaces</artifactId>
    <version>2.0</version>
</dependency>
にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村