JSF+AjaxでUIコンポーネント開発 with Shale Remoting (1)

最近のWebアプリケーションの開発(特にスクラッチから作れる案件)では,AjaxによるWeb2.0的なユーザインタフェースを採用することがほとんどではないだろうか。HTMLの標準フォーム部品に加えて,JavaScriptと非同期通信を使ったWebブラウザ上でのインタラクティブな動作が好まれるようになった。逆に言うと,実装者にとっては,例えばJSPを使ってHTMLを組み立てるだけではなく,JavaScriptまで面倒をみないといけなくなる。必要とする知識やコーディングの量が増えてしまうわけで,システムの利用者にとっては朗報かもしれないが,実装する側にしたら悩みの種となるあろう。 JavaEE5から標準採用となるJSF。これはUIコンポーネントという部品化技術を開発の現場にもたらしてくれる。つまり,久しく遠ざかっていたコンポーネント指向&イベント指向の再到来というわけだ。ただし,JSFはAjaxが流行する前に策定されたという経緯があり,Ajaxのような細かなリクエストの受付に対応していない。あくまで画面を構成するUIコンポーネントのツリー全体に対する操作が基本となる。 JSFでAjaxを扱うための現実解として,現在では以下のどちらかを採用するのが一般的となっている。

  • Ajaxリクエストを受け付ける専用のサーブレットを設置する。

  • PhaseListenerを登録して,Restore Viewフェースの後にAjaxリクエストを別処理する。

Shale Remotingは,2番目の方式を採用した,JSFでAjaxを使用するためのシンプルかつ強力なライブラリである。JavaScriptからサーバ側に存在するJavaオブジェクトのメソッドを透過的に利用する手段としてDWRなどが有名だが,それと同じように,Webブラウザ上のJavaScriptコードからJavaオブジェクトのメソッドを透過的に呼び出すことが可能となる。Shale Remotingの場合,呼び出し対象のJavaオブジェクトは,JSFにて管理されているManagedBeanである。 従来では,JSPのカスタムタグを作成することで,UIに関する処理の隠蔽と再利用性を高めることが多く行われた。それと同様に,JSFではカスタムコンポーネントを次々と作成していくことで,開発生産性を高められるはずである。カスタムコンポーネントにJavaScriptやAjax,ManagedBeanとの連携処理を隠蔽し,UIを簡単に構築できるようになる。そうすれば,技術力が高くないが人数を揃えられる状況,つまりオフショア開発を採用する場合にも,実装の敷居を下げて単純作業化することで対応することが可能となるはずだ。そして,Shale Remotingを使用することで,そのようなカスタムコンポーネント自体の実装効率を向上できるようになるのだ。 ここ数日間,さっそくJSF,Ajax,Shale Remotingを使ったカスタムコンポーネントを作成に挑戦してみた。今後数回にわけてコンポーネントの作成方法をエントリしていきたいと思う。しかし,JSFのカスタムコンポーネントの作成自体,なかなか情報がなく苦労した。特に思ったのは,ネットに掲載されているカスタムコンポーネントに関する記事に間違いが多いことだ。「絶対実行してないだろっ!」といった内容まであって,しかもそれはGoogleでの検索結果の上位にくるものだった。結局はJSFのソースコードを追うことで,正しいカスタムコンポーネントの作成方法を知ることとなった。ソースコードはウソをつかない。 次のエントリでは,どのようなカスタムコンポーネントを作成するか,から書いていこうと思う。

このエントリーをはてなブックマークに追加

関連記事

40%キーボードに慣れるためにやったこと

Lunakey PicoでQMK Firmwareを動かしてみました

Googleアシスタント向け会話型アクションが1年後にシャットダウンされます

Google I/O 2022でのGoogleアシスタント関連のセッション

Remap Organizations feature has been released