Articles
日本オラクル株式会社
システム製品統括本部 Fusion Middleware技術部 SOA/Javaグループ
エンジニア 新井 庸介
システム開発においてユーザー・インターフェースの作成は常にやっかいなものです。筆者はこれまで、Perl、Cに始まり、Servlet/JSP、XSLT、Swing、Flashと様々な言語、技術を用いてUIを作成してきましたが、ADF Faces(とJSF)にはこれまでに無い可能性を感じています。本特集を機会にぜひADF Facesに触れてみてください。
今回から、JSFコンポーネントを用いてWebアプリケーションのユーザー・インタフェース部分を開発する方法を紹介していきます。
オラクルでは、JSFの拡張コンポーネントとしてOracle ADF Faces(以下、ADF Faces)を提供しています。本連載の第3回 「JSF/EJB3.0 サンプル・アプリケーション開発 - 2」で使用した表などのJSFコンポーネントは、ADF Facesによって提供されているものです。ADF Facesは、もちろんADFアプリケーションのユーザー・インタフェースとして利用できますが、ADFによるデータバインドを使用していない場合にも利用することができます。
Oracle ADF Facesは、JSFに100%準拠したコンポーネント・ライブラリであり、JSFアプリケーション開発において一連の広範な拡張UIコンポーネントを提供します。これらのコンポーネントを利用することで、HTMLやJavaScriptを記述することなく、高機能なWebページのユーザー・インタフェースを簡単に構築できます。
ADF Facesは100種にのぼるコンポーネントで構成されています。以下に、カテゴリ別におもなものを説明します。
ボタンやリンク、テキストなど他のUIコンポーネントを配置する枠組みを提供するUIコンポーネントです。ヘッダやメニュー・バーなど、画面をレイアウトする際に利用します。
テキストエリアやプルダウン・リストなど、データの編集や検索フォームなどを作成する際に使用するコンポーネントです。ソート可能なリスト・ボックスなど、カレンダーによる日付入力支援コンポーネント、JSFの標準コンポーネントに比べて高い付加機能を備えています。
またUIコンポーネントに加え、入力のコンバータや入力された値をチェックするためのバリデータも提供しています。入力した日付が指定した範囲内にあるかどうかのチェック(validateDateTimeRangeコンポーネント)、バイト長による文字長チェック(validateByteLength)など、JSF標準にはない付加機能を備えています。
マネージドBean内のイベントのポーリング(poll)や、マネージドBeanのプロパティ値によって表示するファセットを切り替える(switcher)など、画面にロジックを提供するコンポーネントです。
その他多数のコンポーネントを用意しています。ADF Facesコンポーネントの一覧および詳細については、次のページを参照してください。
今回は、ADF Facesのレイアウト用コンポーネントを使用した画面開発を実際におこなってみます。具体的には、次のADF Facesコンポーネントを使用して画面開発をおこないます。
▼レイアウト・コンポーネント
実際の画面作成をおこなう準備として、JDeveloperに開発用のプロジェクトを作成します。JDeveloperのアプリケーション ナビゲータの「アプリケーション」を右クリックして、「新規アプリケーション」を選択します。「アプリケーションの作成」ウィンドウで、表1のように入力して「OK」ボタンをクリックします。
表 1「アプリケーションの作成」ダイアログに設定する値
| 設定項目 | 設定する値 |
|---|---|
| アプリケーション名 | ADFFacesSample |
| ディレクトリ名 | デフォルト |
| アプリケーション・パッケージの接頭語 | com.oracle.adffsample |
| アプリケーション・テンプレート | テンプレートなし[すべてのテクノロジ] |
次に「プロジェクトの作成」ダイアログが表示されます。表2のように入力して「OK」ボタンをクリックします。
表 2:「プロジェクトの作成」ダイアログで設定する値
| 設定項目 | 設定する値 |
|---|---|
| プロジェクト名 | ADFFacesSample |
| ディレクトリ名 | デフォルト |
JSFアプリケーションを作成する際に必要なライブラリをプロジェクトに設定します。作成したADFFacesSampleプロジェクトをアプリケーション ナビゲータで右クリックし、「プロジェクト・プロパティ」を選択します。
起動された「プロジェクト・プロパティ」ダイアログから「テクノロジ・スコープ」を選択し、「使用可能なテクノロジ」から「JSF」を選択してください。これにより、「JSF」およびその依存テクノロジ(「Java」「JSPおよびサーブレット」)が「選択済のテクノロジ」に設定されます。
これで、ADF Facesを使用するJSFプロジェクトの作成が完了しました。次の手順からは、ADF Facesのレイアウト・コンポーネントを使用した画面開発をおこなっていきます。
Webアプリケーションの画面は一般に、ヘッダ、メニュー、メイン・コンテンツ(本文)、フッタに大別できます。ADF FacesのPanelPageコンポーネント(af:panelPageタグ)は、Webページの基本レイアウトパターンを提供します。af:panelPageタグを使用することで、アプリケーション全体で画面レイアウトを統一することができます。
ここでは次の手順で、af:panelPageタグを使用したJSF JSPページを作成します。
まず、JSF JSPページの雛形を生成します。
ウィザードの「終了」ボタンをクリックするとpanelPage.jspが生成され、ビジュアル・エディタで表示されます。
次に、af:panelPageタグをJSPページ上に配置します。panelPage.jspをビジュアル・エディタで開き、コンポーネント・パレット上部のドロップダウン・リストから「ADF Faces Core」を選択してから、「PanelPage」をビジュアル・エディタの赤い破線内にドラッグ&ドロップします。
af:panelPageタグが追加されると、ビジュアル・エディタでは図 12のように表示されます。
panelPage.jspをビジュアル・エディタで開き、右クリックしてコンテキスト・メニューから「実行」を選択します(図 13)。これにより、埋込みOC4Jサーバー(JDeveloperのテスト用J2EEコンテナ)が起動し、Webブラウザに作成したページが表示されます。また、ログ・ウィンドウにはページのURLが表示されています(図 14)。
ここまでの手順で、af:panelPageタグがページに追加されました。以降で、このページにさまざまなUIコンポーネントを配置していきます。
JSFのUIコンポーネントの多くは、ファセット(f:facetタグ)が定義されています。それぞれのファセットには名前がつけられており、ファセット内に記述されたコンポーネントは事前に定義された位置にレンダリングされます。af:panelPageタグが追加されたJSPをJDeveloperのビジュアル・エディタで開くと、「branding」、「brandingApp」などグレーの破線で囲まれている領域が表示されます(図 15)。これらのグレーの破線は、ファセットに追加されたUIコンポーネントが表示される位置を表しています。
af:panelPageタグは、コンポーネントやテキストを配置するための多くのファセットをもっています。表 3は、af:panelPageタグの主要なファセットと、その内部で使用が推奨される子コンポーネントです。
表 3:af:panelPageタグの主要なファセット
| ファセット名 | 説明 |
|---|---|
| branding | af:objectImageタグを使用して、企業または組織のロゴを表示するための領域で、ページの左上隅にレンダリングされます |
| brandingApp | af:objectImageタグを使用して、アプリケーションのロゴまたは製品のブランドを表示するための領域です。デフォルトの設定では、brandingイメージの右にレンダリングされます |
| menuGlobal | af:menuButtonsタグを使用して、ヘルプやアプリケーションの設定など、各ページから常時使用できるボタンまたはリンクを表示するための領域です。ページの右上にレンダリングされます |
| menu1 | af:menuTabsタグを使用して、メイン・メニューをタブとして右寄せでレンダリングします |
| menu2 | af:menuBarタグを使用して、メニュー項目をメニュー・タブ(menu1)の直下の水平バーの中にレンダリングします |
| menu3 | af:menuListタグを使用して、ページの左側、メニュー・バー(menu2)の直下のカラーでオフセットされた領域内にメニュー項目を表示します |
| appCopyright | 著作権のテキストを表示するための領域です。ページの左下にレンダリングされます |
| appPrivacy | アプリケーションのプライバシ・ポリシーについてのページへのリンクを表示します。ページの左下にレンダリングされます |
| appAbout | アプリケーションのバージョン情報のページへのリンクを表示するための領域です。ページの左下にレンダリングされます |
menu2とmenu3以外は、af:panelPageタグをJSPページに配置した時点でJDeveloperのビジュアル・エディタに表示されます。menu2、menu3など、デフォルトではビジュアル・エディタに表示されないファセットにコンポーネントを追加する方法は、以下の「MenuBarコンポーネント」および「MenuListコンポーネント」の項で説明します。
またaf:panelPageは、表 3で紹介した以外のファセットも定義しています。その他のファセットに関する詳細は、「Oracle Application Development Framework開発者ガイド」の「4.4.4 PanelPageコンポーネントの使用方法」を参照してください。
MenuBarコンポーネント(af:menuBarタグ)は、画面にメニュー・バーを表示するためのコンポーネントです。af:panelPageタグを使用している場合は、menu2ファセットに追加します。af:menuBarタグの子コンポーネントは、バーの中で左寄せにされ、縦線で区切られます。
ここでは次の手順で、「PanelPageコンポーネント」で作成したpanelPage.jspにaf:menuBarタグを追加します。
まず、追加するメニュー項目をクリックしたときの遷移先となる画面の作成と、画面遷移の設定をおこないます。
panelPage.jspに追加したaf:panelPageタグのmenu2ファセットに、af:menuBarタグを配置します。
追加したaf:menuBarにメニュー項目を追加します。
表 4:af:commandMenuItemの設定
| プロパティ名 | 設定する値 |
|---|---|
| Text | target.jspへのリンク |
| Action | success(プルダウンから選択) ※ここにリストされる値は、faces-config.xml内の、当該ページの<from-outcome>定義値です |
変更したpanelPage.jspのテストをおこなうと、図 25のように表示されます。画面のメニュー上の「target.jspへのリンク」をクリックするとtarget.jspに遷移することを確認してください。
MenuListコンポーネント(af:menuListタグ)は、おもにサイド・メニューとして利用できるメニュー・リストを表示するためのコンポーネントです。子コンポーネントとして追加されたメニュー・アイテムを箇条書きリスト形式でレンダリングします。
ここでは次の手順で、作成済みのpanelPage.jspにaf:menuListタグを配置します。
次のように、panelPage.jspにaf:menuListタグを追加します。
af:menuListタグにメニュー項目を追加する方法は、af:menuBarにメニュー項目を設定する手順と同じなので、ここでは説明を省略します。メニュー項目を追加すると、ビジュアル・エディタは図 27の画面のように表示されます。
panelPage.jspを実行すると図 28のように表示されます。本項で追加した画面のサイド・メニュー上の「target.jspへのリンク」をクリックすると、target.jspに遷移することを確認してください。
ShowDetailコンポーネント(af:showDetailタグ)は、文書の「表示」と「非表示」を切り替える機能を提供するコンポーネントです。ここでは、作成済みのpanelPage.jspにaf:showDetailタグを配置します。
その他の詳細設定
af:showDetailタグは、プロパティによってさまざまな設定を変更することが可能です。プロパティは構造ウィンドウでaf:showDetailを選択し、プロパティ・インスペクタから設定できます。表 5は、af:showDetailタグのおもなプロパティを示しています。
表 5:af:showDetailタグのプロパティ
| プロパティ名 | 設定する値 | |
|---|---|---|
| 開閉時の表示 | DisclosedText | Open時の表示 |
| UndisclosedText | Close時の表示 | |
| 初期表示時の開閉 | disclosed | True=初期表示はOpen |
| False=初期表示はClose |
ShowOnePanelコンポーネント(af:showOnePanelタグ)は、複数のパネルをグループ化し、表示/非表示を切り替える機能を提供するコンポーネントです。複数のパネルの中から、ユーザーが選択したパネルのコンテンツのみが表示され、他のパネルはヘッダ・テキストのみが表示されます。
この項では以下のステップで、作成済みのpanelPage.jspにaf:showOnePanelタグを追加します。
panelPage.jspをビジュアル・エディタで開き、コンポーネント・パレットのプルダウン・リストから「ADF Faces Core」を選択します。ビジュアル・エディタのShowDetailコンポーネントの右に、コンポーネント・パレットから「ShowOnePanel」をドラッグ&ドロップします。
ここではaf:showOnePanelタグにパネルを追加し、ヘッダとして表示されるテキストを設定します。
ここでは、パネルが選択されたときに表示されるコンテンツを設定します。
表 6:「ハイパーリンクの挿入」ダイアログの設定
| 設定項目 | 設定する値 |
|---|---|
| テキスト | オラクル |
| ハイパーリンク | http://www.oracle.com/lang/jp/ |
上記の「パネルのヘッダを設定」および「パネルのコンテンツを設定」の手順をもう1度繰り返して、もう1つのパネルを追加してください。ヘッダのテキストとして「メニュー2」を設定し、パネルのコンテンツは任意のものを設定してください。
これにより、ビジュアル・エディタは図 42のように表示されます。
panelPage.jspの実行時には図 43のように表示されます。ヘッダをクリックすると、パネルの表示/非表示が切り替わることを確認してください。
今回は、ADF Facesのレイアウト用コンポーネントを使用したユーザー・インタフェース開発について説明しました。本来であれば、煩雑なコーディングによる実装が必要となるWebのユーザー・インタフェースを、コンポーネント・ベースのきわめて容易な方法で開発できることが確認いただけたのではないかと思います。
次回は、ADF Facesのtableコンポーネントを使用して、データを表形式で表示する方法を紹介します。