このトピックでは、次の操作が可能なデータ・バインドされたStrutsアプリケーションのモデル・レイヤー、コントローラ・レイヤーおよびビュー・レイヤーの作成に必要な手順を説明します。
このトピックでは、次の項目について説明します。
アプリケーションが完成したら、ページ・フロー・ダイアグラムから実行します。最初に次のような検索要求用のWebページが表示されます。
検索結果のWebページは次のようになります。
次の図に、このページ・フローを作成するためにモデル・レイヤー、コントローラ・レイヤーおよびビュー・レイヤーで実行する必要のある手順を簡単に示します。
次に、このページ・フローを作成するためにモデル・レイヤー、コントローラ・レイヤーおよびビュー・レイヤーで実行する必要のある主要な手順を詳しく説明します。
モデル・レイヤー
ビジネス・コンポーネントの作成
「ビジネス・サービスおよびモデル・レイヤーの設定」で説明されている手順を実行して、このエンドツーエンド・ソリューションのモデル・レイヤーの準備を開始します。そのトピックでは、Struts、JSPおよびOracle ADF Business Componentsを使用するすべてのエンドツーエンド・ソリューションに共通する情報と手順が説明されています。
ビュー・オブジェクトのカスタマイズ
デフォルトでは、ビュー・オブジェクト問合せは、関連付けられた表のすべてのレコードを返します。この例では、ユーザーは2つのフィールドに入力する基準と一致するレコードを検索できます。この検索を行うには、ビュー・オブジェクトの問合せにwhere句が必要です。ビュー・オブジェクトの問合せを変更するには、ビュー・オブジェクト・エディタでビュー・オブジェクトを編集します。
アプリケーション・モジュール・クラスでのカスタム・メソッドの作成
Oracle ADFアプリケーション・モジュールは、特定のアプリケーション・タスクを表すビジネス・コンポーネントです。一部はXMLファイルで定義され、オプションで、アプリケーション・モジュールのJavaクラスで定義される場合もあります。この例では、ビュー・オブジェクト問合せのwhere句にバインド変数を設定するカスタム・メソッドを追加する必要があります。追加するには、アプリケーション・モジュール・クラスを編集します。
カスタム・メソッドを使用可能にする
アプリケーション・モジュール・クラスにカスタム・メソッドを作成したら、クライアント(Webページ)がコールできるようにカスタム・メソッドを使用可能にする必要があります。使用可能にするには、アプリケーション・モジュール・エディタを使用します。使用可能にすると、データ・コントロール・パレットにカスタム・メソッドが表示されます。
コントローラ・レイヤー(設計時)
動的フォームBeanの作成
このページ・フローでは、フォームBeanを使用して検索問合せのパラメータ値が収集されます。フォームBeanを作成するには構造ウィンドウとプロパティ・インスペクタを使用します。また、構造ウィンドウとStruts構成エディタを使用して、この例で作成するページ・フォワードとデータ・アクションにフォームBeanを追加します。
ページ・フォワードの作成
ページ・フォワード要素は、常に指定の宛先Webページに転送されるStrutsアクション・サブクラスを表します。Strutsコントローラを使用してページ・ナビゲーションを管理する場合は必ずページ・フォワードを使用します。この例では、Webページに関連付けられているアクションによって、ページ・フローの最初のページである検索ページが表示されます。検索ページには、問合せを実行するデータ・アクションへのリンクが含まれます。
ページ・フロー・ダイアグラムとコンポーネント・パレットを使用してページ・フォワードを作成します。ページ・フロー・ダイアグラムはグラフィカルなモデラーです。ページ・フロー・ダイアグラムを使用すると、struts-config.xml
ファイルのアクション・マッピング要素が視覚的に表示され、ページ・フローの構築にかかる時間を短縮できます。コンポーネント・パレットでは、データ・バインドされたStrutsアプリケーションで使用可能なコンポーネントに視覚的にアクセスできます。
データ・アクションの作成
Oracle ADFにより、データ・バインドされたWebページのバインディング・コンテキストを準備し、モデルを介して公開されたカスタム・ビジネス・サービス・メソッドを実行するデータ・アクションが提供されます。データ・バインドされたWebアプリケーションは、Struts構成ファイルのアクション・マッピングを介してデータ・アクション・クラスとともに機能します。このアクション・マッピングではもう1つの<set-property>
要素であるmodelReference
が使用されます。この要素は、Oracle ADFデータ・バインディング・オブジェクトの設定に必要な情報を指定します。この例のデータ・アクションは、検索ページでユーザーが入力した値を使用して問合せを実行します。
ページ・フロー・ダイアグラムとコンポーネント・パレットを使用してデータ・ページを作成します。問合せメソッドをデータ・コントロール・パレットからデータ・ページ・アイコンにドラッグしてデータ・ページに追加します。
データ・ページの作成
データ・ページは、Oracle ADFアクション・サブクラス、フォワードおよびWebページの組合せです。ページ・フロー・ダイアグラムは簡略化されており、3つの要素のうち1つのみが表示されます。Oracle ADFは、データ・バインドされたWebページのバインディング・コンテキストを準備するためにデータ・ページを提供します。データ・ページでは、ページのモデル・データ・バインディングを管理します。Webページを作成すると、モデル・レイヤーに作成されたビジネス・コンポーネントに基づくデータ・バインディングが作成されます。
ページ・フロー・ダイアグラムとコンポーネント・パレットを使用してデータ・ページを作成します。
フォワード・コンポーネントを追加すると、Strutsのローカル<forward>
要素が作成されます。データ・ページ間に2つのフォワードを追加すると、Webアプリケーションのstruts-config.xml
ファイルでデータ・ページに対するStrutsの<action>
要素の定義が更新され、ユーザーがアプリケーションのページ間を移動できるようになります。ページ・フロー・ダイアグラムとコンポーネント・パレットを使用してフォワードを作成します。
ビュー・レイヤー
データ・コントロールを使用したデータ・バインドされたJSPページの作成
JSPページのコンテンツにより、アプリケーションWebページの外観が決まります。UIコンポーネントとビジネス・コンポーネントの間の相互作用を定義するデータ・バインディングを追加して、このページにデータを表示および更新します。Webページに追加するデータ・バインディングでは、EL(式言語)の構文が使用されます。${bindings.EmployeesView3}
のようなEL式を使用すると、各バインディングの実装クラスのアクセッサ・メソッドに直接アクセスできます。
ビジュアル・エディタでJSPページを作成し、データ・コントロール・パレットからデータ・コントロールをページにドラッグして追加します。追加した入力フォームおよび表は、Oracle ADFバインディング・コンテキストに作成されたOracle ADFバインディング・オブジェクトへの参照によって自動的にデータ・バインドされます。
コントローラ・レイヤー(実行時)
アプリケーションの実行
実行時、ユーザーの選択内容はページごとにリクエスト・オブジェクトに設定され、リクエスト・オブジェクトがOracle ADFコントローラ・レイヤーのデータ・ページと通信します。データ・ページでは、受信した情報でOracle ADFバインディング・コンテキストが更新され、適切なページを表示するためのStrutsアクション・マッピングが開始されます。WebページのOracle ADFバインディング式は、解釈されると、データを取得してレンダリングするためのバインディング・コンテキストへのアクセスに必要な情報を提供します。
カスタム・メソッドを作成してクライアントが使用できるようにするには、次のようにします。
EmployeesViewに対するビュー・オブジェクト定義のカスタム問合せを指定します。
ビュー・オブジェクト・エディタの問合せペインに次のwhere句を追加します。
Employees.SALARY > :1 and Employees.DEPARTMENT_ID = :2
次のスクリーン・キャプチャを参照してください。
このwhere句を追加すると、ビュー・オブジェクトを定義する問合せが変更されます。ここでバインド変数を設定するメソッドを定義する必要があります。
アプリケーション・モジュールのJavaクラスにカスタム・メソッドを追加します。
次のコードをアプリケーション・モジュールのクラス・ファイルに追加します。
public void setBindVars(Double salary, Integer departmentId)
{
System.out.println("***In setBindVars*****");
ViewObject vo = findViewObject("EmployeesView1");
vo.setWhereClauseParam(0, salary);
vo.setWhereClauseParam(1, departmentId);
vo.executeQuery();
}
詳細は、「アプリケーション・モジュールの拡張」を参照してください。
クライアントがメソッドを使用できるようにします。
システム・ナビゲータまたはアプリケーション・ナビゲータでアプリケーション・モジュール定義を右クリックし、「編集」を選択します。「クライアント・インタフェース」ノードを選択します。次に、「使用可能」リストの「setBindVars()」を選択して、「選択済」リストに移動します。この手順を実行すると、データ・コントロール・パレットのメソッドが使用可能になります。
このページ・フローに検索ページを作成するには、次の手順を実行する必要があります。
org.apache.struts.action.DynaActionForm
)を作成する。
<set-properties>
要素を使用して追加のプロパティを設定する。
検索のためのページ・フォワードとデータ・アクションを作成するには、次のようにします。
この手順を実行すると、次のアクション・マッピングがstruts-config.xml
ファイルに作成されます。
<action path="/searchRequest" forward="unknown"/>
ページ・フォワード要素をページ・フローの最初のアクション・マッピングとして追加すると、<parameter>
要素がunknown
に設定された<action>
要素が追加されます(値は、次の手順でページ・フォワードに関連するJSPページを作成する際に設定します)。
「/searchRequest」アイコンをダブルクリックし、「ページの選択または作成」ダイアログ・ボックスで「OK」をクリックし、searchRequest.jsp
という名前のJSPページを作成します。このとき、「このページをすぐに編集」チェック・ボックスの選択を解除します。ページの編集は後から行います。
searchRequest.jsp
ファイルが作成され、前の手順で定義したアクションのforward
属性の値が次のように設定されます。
<action path="/searchRequest" forward="/searchRequest.jsp"/>
コンポーネント・パレットで、データ・アクション要素をクリックしてページ・フロー・ダイアグラムにドラッグします。データ・アクションに/executeQueryという名前を付けます。
この手順を実行すると、次のエントリがstruts-config.xml
ファイルに作成されます。
<action path="/executeQuery"
className="oracle.adf.controller.struts.actions.DataActionMapping"
type="oracle.adf.controller.struts.actions.DataAction" name="DataForm"/>
データ・アクションを追加すると、アクションのclassName
属性とtype
属性にOracle ADFサブクラスが使用されます。Oracle ADFアクション・サブクラスを使用したアクション・マッピングの詳細は、「データ・バインドされたStrutsアプリケーションでのページ・フローについて」を参照してください。
動的フォームBeanを作成してページ・フォワードとデータ・アクションに関連付けるには、次のようにします。
「新規フォームBeanの作成」ダイアログにmyFormBean
という名前を入力します。Beanのタイプとして「org.apache.struts.actions.DynaActionForm
」を選択します。「動的」チェック・ボックスを選択して「OK」をクリックします。
「フォーム・プロパティ」タブをクリックします。次のプロパティを追加します。
この2つの手順を実行すると、次のように新しいフォームBeanがStruts構成ファイルに定義されます。
<form-bean name="myFormBean" type="org.apache.struts.action.DynaActionForm" dynamic="true"
<form-property name="salary" type="java.lang.Double"/>
<form-property name="departmentId" type="java.lang.Integer"/>
</form-bean>
ページ・フォワードをmyFormBeanに関連付けます。
構造ウィンドウで、「searchRequest」ノードを右クリックして「編集...」を選択します。Struts構成エディタで「フォームBean」ノードを選択します。「フォームBean」ペインで、「myFormBean」を選択してsearchRequestアクションに関連付けます。
ページ・フォワード、データ・ページおよびデータ・アクションを作成すると、デフォルトでDataForm Beanに関連付けられます。これにより、すべてのバインディング・コンテナの属性がそのフォームで使用可能になり、アプリケーションで必要になるActionForm Beanの作成作業を省略できます。ただし、この例で作成する検索フォームはDataForm Beanを使用できないため、検索に関連するアクションのname
属性をmyFormBean
に変更する必要があります。
executeQueryデータ・アクションをmyFormBeanに関連付けます。
構造ウィンドウで、「/executeQuery」ノードを右クリックして「編集...」を選択します。Struts構成エディタで「フォームBean」ノードを選択します。「フォームBean」ペインで、「myFormBean」をクリックしてexecuteQueryデータ・アクションに関連付けます。
データ・アクションにメソッドを追加するには、次のようにします。
setBindVars()メソッドをexecuteQueryデータ・アクションに追加します。
コンポーネント・パレットのメソッドをページ・フロー・ダイアグラムのデータ・アクション・アイコンにドラッグすると、データ・アクションをサブクラス化せずにメソッドをデータ・アクションに追加できます。次の図は、コンポーネント・パレットでのsetBindVars()メソッドの表示です。
メソッドをデータ・アクションにドラッグすると、Struts構成ファイルのアクション・マッピングにそのメソッドを定義する複数のプロパティが追加されます。
<set-property property="methodName" value="executeQueryUIModel.setBindVars"/>
<set-property property="resultLocation" value="${requestScope.methodResult}"/>
setBindVars()カスタム・メソッドのパラメータ名を定義します。
構造ウィンドウで、「Struts Config」ノードを右クリックして「編集...」を選択します。Struts構成エディタで「アクション・マッピング」ノードを選択します。「アクション・マッピング」ペインで、「executeQuery」をクリックし「Properties」タブを選択します。次のプロパティを変更します。
次のスクリーン・キャプチャを参照してください。
JDeveloperによって、executeQueryデータ・アクションのアクションに次のエントリが追加されます。
<set-property property="numParams" value="2"/>
<set-property property="paramNames[0]" value="${param.salary}"/>
<set-property property="paramNames[1]" value="${param.deptno}"/>
検索ページを作成するには、次のようにします。
searchRequest.jsp
を開きます。
コンポーネント・パレットで「Struts HTML」を選択します。
HTMLフォーム・タグでは関連するアクションを指定できないため、検索フォームではStruts HTMLタグを使用する必要があります。
コンポーネント・パレットからJSPページにform
タグをドラッグします。JavaServer Pagesタグ・エディタが表示されます。
JavaServer Pagesタグ・エディタで、アクション属性の値をexecuteQuery.do
に設定して「OK」をクリックします。
text
タグを、コンポーネント・パレットからフォーム内にドラッグします。
JavaServer Pagesタグ・エディタで、プロパティ属性の値をsalary
に設定して「OK」をクリックします。テキスト入力フィールドの前に「次の金額を超える給与:」というラベルを付けます。
text
タグをフォーム内にドラッグします。
JavaServer Pagesタグ・エディタで、プロパティ属性の値をdeptno
に設定して「OK」をクリックします。
submit
タグをドラッグします。
フォームの上部にヘッダーを追加します(オプション)。
コンポーネント・パレットからページ・フロー・ダイアグラムに戻り、ページ・リンク要素を「/searchResults」アイコンと「/executeQuery」アイコンの間にドラッグします。ページ・フロー・ダイアグラムには次のように表示されます。
注意: Struts HTMLフォームを追加してフォームにアクションを設定するとページ・リンクが作成されますが、JSPページ内で行われた編集はページ・フロー・ダイアグラムには自動的に反映されません。詳細は、「Webページの編集およびページ・フロー・ダイアグラムについて」を参照してください。
結果ページを作成してページ・フローを終了するには、次のようにします。
開いていない場合はStrutsページ・フロー・ダイアグラムを開きます。
この手順を実行すると、新しいアクション・マッピングがstruts-config.xml
ファイルに作成されます。
データ・ページ・アイコンをダブルクリックして、「ページの選択または作成」ダイアログ・ボックスを開き、searchResults.jsp
という名前のJSPページを作成します。「このページをすぐに編集」チェック・ボックスを選択して「OK」をクリックし、ページをビジュアル・エディタで開きます。
データ・コントロール・パレットで「EmployeesView」を選択します。「ドラッグ・アンド・ドロップの形式」リストから読取り専用の表を選択し、EmployeesViewを空のJSPページにドラッグします。
データ・コントロール・パレットには、そのページで使用可能なビジネス・サービスが表示されます。この手順では、ビュー・オブジェクトEmployeesView1を使用してHRデータベースのEmployees表の検索結果を表示する読取り専用フォームを追加します。
データ・バインドされた表をWebページに追加すると、「ビュー」フォルダにDataBindings.cpx
とsearchResultsModelUI.xml
という2つのOracle ADFプロジェクト・ファイルが作成されます。DataBindings.cpx
は、アプリケーション全体のバインディング・コンテナを定義します。searchResultsModelUI.xml
は、個々のWebページが使用するデータ・コントロールを定義するモデル参照です。これらのファイルでは表の表示に必要なメソッドおよびパラメータが完全に定義されるため、検索フォームに使用したカスタム・メソッドの定義および使用で実行した多くの手順を省略できます。
この時点で、struts-config.xml
ファイルが更新されます。次のように<set-property>
要素がアクション・マッピングに追加され、関連付けられている<action>
要素にモデル参照が定義されます。
<set-property property="modelReference" value="searchResultsUIModel"/>
Oracle ADFプロジェクト・ファイルの詳細は、「ADF固有のプロジェクト・ファイルについて」を参照してください。データ・コントロール・パレットの詳細は、「データ・コントロール・パレットを使用したUIコンポーネントの挿入」を参照してください。
searchResults.jsp
を保存して閉じます。
「/searchResults」アイコンから「/searchRequest」アイコンへのページ・リンクを追加します。
これにより、生成される検索結果ページの一番下にリンクが追加されます。
「/executeQuery」アイコンから「/searchResults」アイコンへのフォワードを追加します。
これによって、executeQueryデータ・アクションの<forward>
要素が次のように定義されます。
<forward name="success" path="/searchResults.do"/>
ページ・フロー・ダイアグラムには次のように表示されます。
データ・バインドされた検索ページをStrutsページ・フロー・ダイアグラムから実行します。
アプリケーションを実行するには、次のようにします。
検索フィールドに値を入力して「Submit」をクリックすると、検索結果が表示されます。
別の検索を実行するには、検索結果表の下のリンクをクリックします。
Copyright © 1997, 2004, Oracle. All rights reserved.