BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース OmniFaces - Java Server Faces ユーティリティライブラリ

OmniFaces - Java Server Faces ユーティリティライブラリ

原文(投稿日:2012/07/25)へのリンク

 

OmniFaces は,エンタープライズアプリケーションの JSF 開発を容易する目的を持ったユーティリティライブラリである。Bauke Scholtz (別名 BalusC) と Arjan Tijms 両氏の開発によるものだ。人気の QA サイト Stack Overflow の常連回答者である両氏は,同サイトに JSF 2.x 関連の同じ質問が何度も掲載されていることに気付き,その後 OmniFaces を開発した。ただしその名称とは裏腹に,OmniFaces は JSF を再実装したものではない。特定の問題向けにいくつかのヘルパあるいはソリューションを提供することで,JSF ライブラリを補完するものだ。事実 ライブショーケース では,PrimeFaces がベースとして使用されている。

OmniFaces ライブラリには,実装機能の膨大なリストがある。

  • バリデーションエラーになった フィールドの強調表示 機能。
  • EL スコープへの定数インポート。
  • ドロップダウンなど選択コンポーネントの モデルオブジェクトを自動変換 する機能。
  • マルチフィールドバリデータ。"すべて/なし", "すべて等しい", "ひとつ/複数", "すべて正常", "ユニーク" などといったバリデーションを行う。
  • HTML5 レンダラ・キット。HTML5 特有の属性サポートを UIForm および UIInput コンポーネントに追加する。
  • 完全な Ajax 例外ハンドラ。
  • レベル単位の完全カスタム対応マークアップを備えた ツリー (さまざまな再帰的ユースケースで使用可能)。
  • 配列,変換,日付,文字列などを扱う EL 関数のコレクション。
  • HTTP レスポンス用 GZIP 圧縮フィルタ。
  • Servlet と JSP Pages を Facelet に追加。

さらに説明を聞くために,InfoQ は OmniFaces の2人の作者にコンタクトを取った。インタビューはライブラリの開発理由に関する話題から始まった。氏らが指摘したのは,JSF に Apache Commons あるいは Guava に相当するものが存在しないという点だ,その結果,"すべての企業や JSF Web アプリケーション開発者が,自分自身でユーティリティを作成しなければなりません。最初の開発時には時間の浪費にもなりますし,エラーも頻繁に発生します。" さらに氏らは,JSF アプリケーションに同じ課題が繰り返し発生している点も指摘した。例えば "Ajax を更新する前に無効あるいは未処理のコンポーネントを初期化したい",あるいは "標準的な web.xml エラーページの機構を用いて Ajax 完全対応の例外ハンドラを実装したい", "ドロップダウンの項目に対応する汎用コンバータ" といったものだ。

JSF ライブラリには PrimeFacesRichFaces, ICEFaces など, すでに多数のものが存在している。OmniFaces に関する次の話題は,それらとの比較になった。

OmniFaces では,カスタムレンダラ (CSS や JS を生成することで,しゃれたルック・アンド・フィールや拡張動作を実現するような) を持ったビジュアルコンポーネントは提供していません。OmniFaces のコンポーネントやタグハンドラは,既存のコア JSF コンポーネントやタグハンドラを拡張したものなのです。f:viewParam や f:converter, f:validator, h:form, h:outputLabel といったものです。

コンポーネントとタグハンドラ以外にも,再利用可能なユーティリティを多数提供しています。これは他のライブラリにはないもので,車輪を再発明するような作業を不要にすることで,JSF 開発をより簡単にします。

PrimeFaces や RichFaces,ICEFaces などのライブラリは,どれも視覚的なコンポーネント (ウィジェット) に重きを置いているようですが,OmniFaces はユーティリティの提供や,JSF の欠点と問題点の回避手段により力を注いでいるのです。先の3つが JSF コンポーネントライブラリで,OmniFaces は JSF ユーティリティライブラリである,と言ってもよいでしょう。

InfoQ: 新たなライブラリを開発する代わりに,既存の JSF フレームワークを拡張する,という選択肢はなかったのでしょうか。

理屈の上では可能ですが,私たちはそうはしませんでした。すべての JSF web アプリケーションで利用可能なユーティリティライブラリを作りたいと思っていたからです。ただし RichFaces の PartialViewContext 実装に未解決なバグがあったため, ResetInputAjaxActionListener には RichFaces 特有の回避コードがあります。

InfoQ: Stack Overflow サイトで見た,繰り返し発生している問題あるいは質問というのは,どのようなものだったのでしょう。

マークアップの不要なツリーコンポーネントへの要望,IE の条件付きコメントの扱いにくさ,設定された項目を高価な DAO コールを行わずに変換可能な f:selectitems コンバータの要望,前回バリデーションでエラーとなったが,現在のバリデーションで更新の必要な入力処理のリセット実行,Ajax 対応の例外ハンドラなど,それこそ数限りなくあります。

現時点でのロードマップは,ユーザが JSF に対して抱いている問題点によってほぼ決定されています。つまり私たちは,自分たちのやりたいことを机上で計画しているのではなく,現実に発生している問題に対応しているのです。この方法がが絶対的ということではありません。私たちが適切と考えれば,ある時点で特定の機能を導入することもあるでしょう。しかし今のところは,ユーザの問題を解決するというのがすべてですね。

InfoQ: その他,InfoQ 読者に伝えておきたいと思うことはありますか。

特に強調しておきたいことがあるとすれば,私たちは PrimeFaces (あるいは RichFaces) との競合を目指しているわけではない,という点です。それどころか,私たちは PrimeFaces の大ファンで,関係しているビジネスアプリケーション開発では日常的に利用している位なのです。OminiFaces を紹介するアプリケーションには, PrimeFaces を使ってビルドされていることが右上に明記されています。この事実からも十分に分かって頂けるものと思っています。

OmniFaces は バージョン 1.0 (追記: バージョン 1.1 ) がリリース済みで,Maven を通じて入手することができる。詳細については ブログJavadocタグライブラリの資料 などを参照してほしい。

 

この記事に星をつける

おすすめ度
スタイル

BT