ヘッダーをスキップ
Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド
11gリリース1(11.1.1)
B52029-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2 ADF Faces概説

この章では、JDeveloperを使用してADF Facesアプリケーションを宣言的に作成する方法について説明します。

この章に含まれる項は次のとおりです。

2.1 JDeveloperでの宣言的開発

JDeveloper 11gをOracle ADF、JSFと組み合せて使用すると、EL式の作成や自動コンポーネント・バインディングなどのようにページやマネージドBeanを宣言的に生成できるケースが多くなります。また、ナビゲーションや構成を制御するメタデータなどのXMLメタデータが宣言的に生成されるケースも多くなります。

大まかにとらえると、ADF Facesのビュー開発プロセスは次の作業で構成されます。

開発サイクル全体を通じて継続されるプロセスとしては、次のものがあります。

JDeveloperには、デバッグやテストの機能も含まれています。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「ADFコンポーネントのテストとデバッグ」を参照してください。

2.2 アプリケーション・ワークスペースの作成

新規アプリケーションを作成する最初のステップは、名前を割り当て、ソース・ファイルを保存するディレクトリを指定することです。JDeveloperに用意されているアプリケーション・テンプレートを使用してアプリケーションを作成すると、ワークスペースの編成と、作成するアプリケーションのタイプに必要な多くの構成ファイルが自動的にプロジェクトに含められます。

2.2.1 アプリケーション・ワークスペースの作成方法

アプリケーション・ワークスペースの作成には、アプリケーションの作成ウィザードを使用します。

アプリケーションを作成する手順:

  1. JDeveloperのメニューで、「ファイル」「新規」と選択します。

    新規ギャラリが開き、作成するアプリケーション・コンポーネントを選択できます。

  2. 「一般」ノードの「カテゴリ」ツリーで、「アプリケーション」を選択します。「項目」ペインで「Java EE Webアプリケーション」を選択し、「OK」をクリックします。

    このテンプレートは、ビューにJSFを使用し、ビジネス・サービスにEnterprise JavaBean(EJB)セッションBeanとJava Persistence API(JPA)エンティティを使用するWebアプリケーションの作成に必要な基礎となります。アプリケーションのビジネス・レイヤー用のファイルとディレクトリはすべて、Modelというデフォルト名のプロジェクトに格納されます。ビュー・レイヤー用のファイルとディレクトリはすべて、ViewControllerというデフォルト名のプロジェクトに格納されます。


    注意:

    このドキュメントでは、アプリケーションでADF Facesプロジェクトを作成する方法のみを対象とします。使用するビジネス・サービスまたはこれらのサービスへのバインディングについては対象外です。ADF FacesとADF Modelレイヤー、ADF ControllerおよびADF Business Componentsとを組み合せた使用方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

  3. 「Java EE Webアプリケーションの作成」ダイアログで名前、場所およびパッケージ接頭辞を設定して「次へ」をクリックします。

  4. 「プロジェクトの名前付け」ページで、Webプロジェクトの名前と場所を必要に応じて変更できます。「プロジェクト・テクノロジ」タブで「ADF Faces」をダブルクリックしてこのテクノロジを選択済ペインに移動します。これによって、必要なライブラリとメタデータ・ファイルがWebプロジェクトに追加されます。「次へ」をクリックします。

  5. Java設定の構成ページで、ビュー・レイヤーのパッケージ名、Javaソース・パスおよび出力ディレクトリを必要に応じて変更します。「次へ」をクリックします。

  6. 「プロジェクトの名前付け」ページで、Javaプロジェクトの名前と場所を必要に応じて変更できます。Java EEに必要なライブラリとメタデータ・ファイルが、デフォルトでモデル・プロジェクトにすでに追加されています。「次へ」をクリックします。

  7. プロジェクトのJava設定の構成ページで、モデル・レイヤーのパッケージ名、Javaソース・パスおよび出力ディレクトリを必要に応じて変更します。「次へ」をクリックします。

  8. 必要に応じてEJB設定を構成します。このページのヘルプを表示するには、「ヘルプ」をクリックするか、[F1]キーを押します。「終了」をクリックします。

2.2.2 アプリケーション・ワークスペースを作成する場合の処理

Java EE Webアプリケーション・テンプレートを使用してアプリケーション・ワークスペースを作成すると、アプリケーションのビジネス・サービスに関連するすべてのソース・ファイルを含むModelという名前のプロジェクトがJDeveloperによって作成されます。EJBプロジェクトに必要なライブラリがJDeveloperで自動的に追加されます。たとえば、デフォルトのEJB設定のままの場合、JDeveloperで次のライブラリが追加されます。

  • Toplink

  • Oracle XML Parser v2

  • EJB 3.0

ADF Facesビュー・レイヤー用のすべてのソース・ファイルを含むViewControllerという名前のプロジェクトもJDeveloperによって作成されます。アプリケーションに必要なJSFおよびADF構成ファイルは、JDeveloperで自動的に作成されます。また、次のライブラリがJDeveloperでビュー・プロジェクトに追加されます。

  • JSF 1.2

  • JSTL 1.2

  • JSPランタイム

プロジェクトにJSFページを作成すると、ADF Facesおよびその他のランタイム・ライブラリが追加されます。

プロジェクトの作成後、名前を変更できます。図2-1に、新規Java EE Webアプリケーションのワークスペースを示します。

図2-1 ADFアプリケーションの新規ワークスペース

JDeveloperのワークスペースにプロジェクトとファイルが含まれます

アプリケーションの作成時に選択したオプションに基づいて、JDeveloperで構成ファイルに構成パラメータが設定されます。web.xmlファイルには、JSFアプリケーションの実行に必要な構成が含まれます(ADF Facesに固有の設定は、ADF Facesコンポーネントを使用してJSFページを作成したときに追加されます)。例2-1に、Java EEアプリケーションの新規作成時にJDeveloperによって生成されるweb.xmlファイルを示します。

例2-1 生成されたweb.xmlファイル

<?xml version = '1.0' encoding = 'windows-1252'?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee">
  <description>Empty web.xml file for Web Application</description>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>35</session-timeout>
  </session-config>
  <mime-mapping>
    <extension>html</extension>
    <mime-type>text/html</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>txt</extension>
    <mime-type>text/plain</mime-type>
  </mime-mapping>
</web-app>

ADF Facesコンポーネントを使用してJSFページを作成すると、例2-2のようなADF Facesのデフォルト・レンダー・キット(HTMLクライアントでのコンポーネントの表示に使用)を定義するエントリがJDeveloperによってfaces-config.xmlファイルに作成されます。

例2-2 生成されたfaces-config.xmlファイル

<?xml version="1.0" encoding="windows-1252"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
  <application>
    <default-render-kit-id>oracle.adf.rich</default-render-kit-id>
  </application>
</faces-config>

例2-3のようなtrinidad-config.xmlファイルのエントリによって、アプリケーションのユーザー・インタフェース(UI)コンポーネントで使用されるデフォルト・スキンが定義されます。

例2-3 生成されたtrinidad-config.xmlファイル

<?xml version="1.0" encoding="windows-1252"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>blafplus-rich</skin-family>
</trinidad-config>

特定のADF Faces機能に必要な構成は、このガイドの別の項で説明されています。たとえば、変更永続性フレームワークを使用するために必要な構成は、第31章「JSFページでのユーザー・カスタマイズの許可」で説明されています。ADF Facesアプリケーションの包括的な情報は、付録A「ADF Facesの構成」を参照してください。

2.3 ページ・フローの定義

アプリケーション・ワークスペース作成後の次のステップは、通常、UIのフローを設計することです。標準JSFアプリケーションの場合と同様に、ADF Facesアプリケーションでは、ページ・フローの定義にナビゲーション・ケースとルールが使用されます。これらの定義は、faces-config.xmlファイルに格納されます。JDeveloperには、アイコンを使用してページ・フローを宣言的に定義できるダイアグラマがあります。

図2-2に、特定の顧客のデータを表示するDisplayCustomerページと、ユーザーが顧客情報を編集できるEditCustomerページの2つのページを含む簡単なページ・フロー用に作成されたナビゲーション・ダイアグラムを示します。ページの表示からページの編集へ進むナビゲーション・ルールと、ページの編集からページの表示へ戻るナビゲーション・ルールが1つずつあります。

図2-2 JDeveloperのナビゲーション・ダイアグラム

JDeveloperでのナビゲーションの設定

注意:

Oracle ADF Modelのデータ・バインディングおよびADF Controllerを使用する場合、標準JSFナビゲーション・ルールではなく、タスク・フローを使用します。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「ADFタスク・フローの概説」を参照してください。


ベスト・プラクティスのヒント:

ADF ControllerはJSFデフォルト・コントローラの拡張です。技術的にはアプリケーションでJSFコントローラとADF Controllerを使用できますが、いずれか一方のみを使用するようにしてください。

JSFアプリケーションでのナビゲーション機能の詳細は、Sun社のWebサイト(http://java.sun.com)の「Java EE 5 tutorial」を参照してください。

2.3.1 ページ・フローの定義方法

JDeveloperでは、ナビゲーション・ダイアグラマを使用して、ページ・フローを宣言的に作成します。ダイアグラマを使用すると、アプリケーションでナビゲーションが機能するために必要なXMLメタデータが、JDeveloperによってfaces-config.xmlファイルに作成されます。

ページ・フローを作成する手順:

  1. アプリケーションのfaces-config.xmlファイルを開きます。これは、デフォルトではWeb Content/WEB-INFノードにあります。

  2. 「ダイアグラム」タブをクリックし、ナビゲーション・ダイアグラマを開きます。

  3. JDeveloperにコンポーネント・パレットが表示されない場合は、メイン・メニューから「表示」「コンポーネント・パレット」と選択します。デフォルトでは、コンポーネント・パレットはJDeveloperの右上部に表示されます。

  4. コンポーネント・パレットでドロップダウン・メニューを使用して「JSFダイアグラム・オブジェクト」を選択します。

    コンポーネントが、「コンポーネント」「注釈」の2つのアコーディオン・パネルに含まれています。図2-3に、JSFナビゲーション・コンポーネントを表示しているコンポーネント・パレットを示します。

    図2-3 JDeveloperのコンポーネント・パレット

    ナビゲーション・アイテムを含むコンポーネント・パレット
  5. 使用するコンポーネントを選択し、ダイアグラムにドラッグします。

    新たに追加されたコンポーネントを使用してJDeveloperでダイアグラムが再描画されます。


ヒント:

「概要」タブをクリックし、ナビゲーション・ルールとナビゲーション・ケースの作成を概要エディタで行うこともできます。概要エディタを使用したナビゲーション作成の詳細は、[F1]キーで参照できます。

また、faces-config.xmlファイルに手動で要素を追加することもできます。その場合はソース・エディタでファイルを直接編集します。ソース・エディタにファイルを表示するには、「ソース」タブをクリックします。


アプリケーションのナビゲーションを定義したら、次はページを作成したり、ナビゲーションを使用するコンポーネントを追加したりできます。ページでのナビゲーション・コンポーネントの使用の詳細は、第18章「ナビゲーション・コンポーネントの使用」を参照してください。

2.3.2 ダイアグラマを使用してページ・フローを作成する場合の処理

ページ・フローの作成にダイアグラマを使用すると、JDeveloperで関連するXMLエントリがfaces-config.xmlファイルに作成されます。例2-4に、図2-2に示すナビゲーション・ルール用に生成されたXMLを示します。

例2-4 faces-config.xmlのナビゲーション・ルール

<navigation-rule>
  <from-view-id>/DisplayCustomer</from-view-id>
  <navigation-case>
    <from-outcome>edit</from-outcome>
    <to-view-id>/EditCustomer</to-view-id>
  </navigation-case>
</navigation-rule>
<navigation-rule>
  <from-view-id>/EditCustomer</from-view-id>
    <navigation-case>
      <from-outcome>back</from-outcome>
      <to-view-id>/DisplayCustomer</to-view-id>
    </navigation-case>
</navigation-rule>

2.4 JSFページの作成

計画段階で作成したページ・フローからページ・アイコンをダブルクリックすると、実際のJSPファイルを作成できます。ADFアプリケーションを作成する場合は、*.jspファイルではなく、XMLベースのJSPドキュメント(拡張子*.jspxを使用)を作成することをお薦めします。XMLベースのドキュメントの使用には、次の利点があります。

ADF Facesには、ページ全体のレイアウトを定義する際に使用可能なコンポーネントが多数用意されています。JDeveloperには、これらのレイアウト・コンポーネントを使用した事前定義済のテンプレートが含まれており、すばやく簡単に正しくレイアウトを構築できます。1列、2列または3列のレイアウトから選択でき、列の動作を指定できます。たとえば、1つの列の幅はロックし、他の列は拡大してブラウザの使用可能な領域を埋めることができます。図2-4に、2番目の列が2つのペインに分割されている2列レイアウトで使用可能なクイック・レイアウトを示します。レイアウト・コンポーネントの詳細は、第8章「Webページ上のコンテンツの編成」を参照してください。

図2-4 クイック・レイアウト

多数のクイック・レイアウトから選択できます

同じレイアウトをアプリケーションの多くのページで使用する場合には、ADF Facesでは事前定義済ページ・テンプレートを作成および使用できます。テンプレートを作成する場合、テンプレートの開発者はテンプレートを使用するページのレイアウトを決定する(図2-4に示すようにクイック・レイアウト・デザインから選択するか手動で構築します)だけではなく、すべてのページに表示される静的コンテンツを含めたり、各ページで有効な値に置き換えられるプレースホルダ属性を作成できます。たとえば、ADF FacesにはOracle Three Column Layoutテンプレートが含まれています。このテンプレートには、図2-5に示すように、ブランド、ヘッダー、著作権情報などの特定のコンテンツ用の領域が含まれています。

図2-5 Oracle3列レイアウト・テンプレート

Oracle Three Column Layoutテンプレート

テンプレートにレイアウトなどの変更を加えるたびに、テンプレートを使用するページも自動的に更新されます。テンプレートの作成と使用の詳細は、19.3項「ページ・テンプレートの使用」を参照してください。

JSFページを作成する際、ページに関連するバッキングBeanも作成するよう選択できます。バッキングBeanを使用すると、ページ上のコンポーネントにプログラムからアクセスできます。詳細は、2.4.3項「自動コンポーネント・バインディングについて」を参照してください。


ベスト・プラクティスのヒント:

プログラムからのアクセスや処理が必要なコンポーネントを含むページについてのみバッキングBeanを作成します。リスナーなど、コンポーネント属性のEL式を使用してアクセスする追加機能を提供するのみ場合は、かわりにマネージドBeanを使用します。

ページをモバイル機器で表示可能にすることを選択できます。ページ・ファイルを作成した後は、そのファイルにUIコンポーネントを追加したり、そのページのソースを操作することができます。

2.4.1 JSFページの作成方法

JSFページの作成には、「JSFページの作成」ダイアログを使用します。

JSFページを作成する手順:

  1. アプリケーション・ナビゲータで、ページを保存するディレクトリを右クリックし、「新規」を選択して新規ギャラリを開きます。「Web層」ノードの「カテゴリ」ツリーで、「JSF」を選択します。「項目」パネルで、「JSFページ」を選択します。

    または

    ナビゲーション・ダイアグラムから、まだ作成されていないページのページ・アイコンをダブルクリックします。

  2. 「JSFページの作成」ダイアログに従って操作を進めます。ヘルプを参照するには、ダイアログで「ヘルプ」をクリックします。バッキングBeanと関連するバインディングの自動作成に使用できるページ実装オプションの詳細は、2.4.3項「自動コンポーネント・バインディングについて」を参照してください。

2.4.2 JSFページを作成する場合の処理

「JSFページの作成」ダイアログを使用してJSFページを作成すると、JDeveloperによって物理ファイルが作成され、必要なコードがファイル内に追加されます(コンポーネント・ライブラリをインポートし、ページを表示するためのコード)。作成されるコードは、.jspxドキュメントを作成するよう選択したかどうかによって異なります。例2-5に、JDeveloperで最初に作成されたときの.jspxページを示します。

例2-5 JDeveloperで作成された宣言ページ・ソース

<?xml version='1.0' encoding='windows-1252'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
  <jsp:directive.page contentType="text/html;charset=windows-1252"/>
  <f:view>
    <af:document id="d1">
      <af:form id="f1"></af:form>
    </af:document>
  </f:view>
</jsp:root>

クイック・レイアウトの使用を選択した場合にも、JDeveloperによってレイアウトの表示に必要なコンポーネントが追加されます。例2-6に、2列レイアウトを選択した場合に生成されるコードを示します。この例では1列目はロックされており、2列目はブラウザの利用可能な領域いっぱいに拡大されます。

図2-6 2列レイアウト

<?xml version='1.0' encoding='windows-1252'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
  <jsp:directive.page contentType="text/html;charset=windows-1252"/>
  <f:view>
    <af:document id="d1">
      <af:form id="f1">
        <af:panelStretchLayout startWidth="100px" id="psl1">
          <f:facet name="start"/>
          <f:facet name="center"/>
        </af:panelStretchLayout>
      </af:form>
    </af:document>
  </f:view>
</jsp:root>

ダイアログの「ページの実装」セクションを使用してバッキングBeanを自動作成するよう選択した場合は、そのページ用のバッキングBeanも作成および登録され、既存のコンポーネントがそのBeanにバインドされます。例2-7に、ページのバッキングBean用に作成されたコードを示します。

例2-7 JDeveloperで作成された宣言バッキングBeanのソース

package view.backing;

import oracle.adf.view.rich.component.rich.RichDocument;
import oracle.adf.view.rich.component.rich.RichForm;

public class MyFile {
    private RichForm f1;
    private RichDocument d1;

    public void setF1(RichForm f1) {
        this.f1 = f1;
    }

    public RichForm getF1() {
        return f1;
    }

    public void setD1(RichDocument d1) {
        this.document1 = d1;
    }

    public RichDocument getD1() {
        return d1;
    }
}

ヒント:

バッキングBeanのソースはJSFページからアクセスできます。エディタでページを右クリックして「移動先」を選択し、リストからBeanを選択します。

また、次のライブラリがJDeveloperでビュー・プロジェクトに追加されます。

  • ADF Facesランタイム11

  • ADF Commonランタイム

  • ADF DVT Facesランタイム

  • Oracle JEWT

ページがJDeveloperに初めて表示される場合、ビジュアル・エディタ(「設計」タブをクリックしてアクセス)に表示され、WYSIWYG環境でページを見ることができます。「ソース」タブをクリックして、ページのソースをソース・エディタに表示することもできます。JDeveloperの左下部にある構造ウィンドウには、ページが階層形式で表示されます。

2.4.3 自動コンポーネント・バインディングについて

バッキングBeanは、JSPページのUIコンポーネントのロジックとプロパティを含むマネージドBeanです(マネージドBeanの詳細は、2.6項「マネージドBeanの作成と使用」を参照してください)。JSFページを作成する際、「JSFページの作成」ダイアログの「ページの実装」の選択肢の1つを選択してUIコンポーネントを自動的に公開するよう選択すると、JDeveloperでページのバッキングBeanが自動的に作成(または、選択したマネージドBeanが使用)されます。ページに追加するコンポーネントごとに、JDeveloperでそのコンポーネントのBeanプロパティが挿入され、binding属性を使用してコンポーネント・インスタンスとそのプロパティがバインドされて、Beanでコンポーネント・インスタンスを受け入れたり、返すことができます。

自動コンポーネント・バインディングを使用すると、具体的にはJDeveloperで次の処理が行われます。

  • JSPまたはJSPXファイルと同じ名前を使用してJava Beanを作成し、view.backingパッケージに含めます(JDeveloperでバッキングBeanを作成するよう選択した場合)。

  • バッキングBeanのマネージドBeanエントリがfaces-config.xmlファイルに作成されます。デフォルトでは、マネージドBeanの名前はbacking_<page_name>で、Beanはrequestスコープを使用します。


    注意:

    JDeveloperでは、マネージドBeanのプロパティ・エントリはfaces-config.xmlファイルに作成されません。特定のプロパティ値でBeanをインスタンス化する場合、この構成をfaces-config.xmlファイルに手動で行う必要があります。詳細は、A.3.1項「faces-config.xmlでのADF Facesの構成方法」を参照してください。

  • 新たに作成または選択されたBeanの場合、JSPにあるコンポーネント・タグごとにプロパティとアクセッサ・メソッドが追加されます。JDeveloperでバインディング属性の値としてEL式を使用し、コンポーネント・タグとそのプロパティがバインドされます。

  • ページから削除されたコンポーネントのプロパティとメソッドが削除されます。

ページが作成され、コンポーネントが追加された後、ビジュアル・エディタでコンポーネントをダブルクリックして、使用するコンポーネントにメソッド・バインディング式を宣言的に追加できます。これにより、属性をバインドするマネージドBeanとメソッドを選択できるエディタが起動します。JSFページに自動コンポーネント・バインディングが使用されている場合、コンポーネントをダブルクリックすると、コンポーネントがバインドされる可能性のあるスケルトン・メソッドが、ページのバッキングBeanに自動的に作成されます。たとえば、コマンド・ボタン・コンポーネントを追加し、ビジュアル・エディタでこれをダブルクリックすると、「バインドActionプロパティ」ダイアログにページのバッキングBeanと新しいスケルトン・アクション・メソッドが、図2-6に示すように表示されます。

図2-6 JDeveloperの「バインドActionプロパティ」ダイアログ

メソッドにバインドする「バインドActionプロパティ」ダイアログ

これらのメソッドから選択するか、新しいメソッド名を入力すると、JDeveloperでページのバッキングBeanに新規スケルトン・メソッドが自動的に作成されます。その後、メソッドにロジックを追加する必要があります。


注意:

JSFページに自動コンポーネント・バインディングが使用されていない場合、バインディングを作成するには、既存のマネージドBeanを選択するか、新規バッキングBeanを作成する必要があります。

たとえば、myfile.jspxという名前でJSFページを作成するとします。JDeveloperで自動的にデフォルト・バッキングBeanを作成するよう選択すると、JDeveloperでは、バッキングBeanがview.backing.MyFile.javaとして作成され、ViewControllerプロジェクトの\srcディレクトリに置かれます。バッキングBeanはfaces-config.xmlでマネージドBeanとして構成されます。デフォルトのマネージドBeanの名前は、backing_myfileです。

例2-8に、自動コンポーネント・バインディングを使用し、forminputTextおよびcommandButtonコンポーネントを含むJSFページのコードを示します。

例2-8 自動コンポーネント・バインディングを使用するJSFページのコード

<f:view>
  <af:document id="d1" binding="#{backing_myfile.d1}">
    <af:form id="f1" binding="#{backing_myfile.f1}">
      <af:inputText label="Label 1" binding="#{backing_MyFile.inputText1}"
                    id="inputText1"/>
      <af:commandButton text="commandButton 1"
                        binding="#{backing_MyFile.commandButton1}"
                        id="commandButton1"/>
    </af:form>
  </af:document>
</f:view>

例2-9に、対応するバッキングBeanのコードを示します。

例2-9 自動コンポーネント・バインディングを使用するバッキングBeanのコード

package view.backing;

import oracle.adf.view.rich.component.rich.RichDocument;
import oracle.adf.view.rich.component.rich.RichForm;
import oracle.adf.view.rich.component.rich.input.RichInputText;
import oracle.adf.view.rich.component.rich.nav.RichCommandButton;

public class MyFile {
    private RichForm f1;
    private RichDocument d1;
    private RichInputText inputText1;
    private RichCommandButton commandButton1;

    public void setForm1(RichForm f1) {
        this.form1 = f1;
    }

    public RichForm getF1() {
        return f1;
    }

    public void setD1(RichDocument d1) {
        this.d1 = d1;
    }

    public RichDocument getD1() {
        return d1;
    }

    public void setIt1(RichInputText inputText1) {
        this.inputText1 = inputText1;
    }

    public RichInputText getInputText1() {
        return inputText1;
    }

    public void setCommandButton1(RichCommandButton commandButton1) {
        this.commandButton1 = commandButton1;
    }

    public RichCommandButton getCommandButton1() {
        return commandButton1;
    }

    public String commandButton1_action() {
        // Add event code here...
        return null;
    }
}

例2-10に、ページのバッキングBeanをマネージドBeanとして登録するようfaces-config.xmlファイルに追加されたコードを示します。

例2-10 バッキングBeanの登録

<managed-bean>
  <managed-bean-name>backing_MyFile</managed-bean-name>
  <managed-bean-class>view.backing.MyFile</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

また、JSFページのバッキングBeanであるJavaファイルを編集する際、メソッド・バインディング・ツールバーがJavaソース・エディタに表示され、選択したページのコンポーネントに適切なメソッドを迅速かつ容易にバインドできます。イベントを選択すると、JDeveloperで図2-7に示すようなイベントのスケルトン・メソッドが作成されます。

図2-7 Javaソース・エディタでのスケルトン・メソッドの宣言的作成

JDeveloperソース・エディタ

ページの作成後、自動コンポーネント・バインディングの有効/無効を切り替えられます。バッキングBeanを別のJavaクラスに変更することもできます。ビジュアル・エディタでページを開き、JDeveloperのメニューから、「設計」「ページ・プロパティ」と選択します。ここで、「自動バインド」オプションを選択または選択解除でき、マネージドBeanのクラスを変更できます。ダイアログの使用の詳細が必要な場合は、「ヘルプ」をクリックします。


注意:

自動バインドを無効にした場合、ページでバインドされている既存のコンポーネントのバインド属性は変わりません。自動バインドを有効にした場合、バインドされているすべての既存のコンポーネントと新たに挿入するコンポーネントが、選択したマネージドBeanにバインドされます。自動バインドが有効で、マネージドBeanの選択を変えた場合、既存のすべてのバインディングと新規バインディングが新しいBeanに切り替わります。

ページのバッキングBeanにはページ・エディタからアクセスできます。ページを右クリックして「移動先」を選択し、ページに関連付けられているBeanのリストからBeanを選択します。

2.4.4 ADF FacesコンポーネントのJSFページへの追加方法

ページの作成後、コンポーネント・パレットを使用して、コンポーネントをページにドラッグ・アンド・ドロップできます。コンポーネントを追加すると、必要なページ・コードが宣言的に自動追加され、各コンポーネント属性に既定の値が設定されます。


ヒント:

第III部「ADF Facesコンポーネントの使用」の章に、特定のADF Facesコンポーネントの追加および使用に関する情報が記載されています。


注意:

ADF FacesコンポーネントとMyFaces Trinidadコンポーネント(tr:タグ)または他のAJAX対応ライブラリ・コンポーネントは同じページで使用できません。Trinidad HTMLタグ(trh:)はADF Facesコンポーネントと同じページで使用できますが、ブラウザ・レイアウトに問題が生じる場合があります。常にADF Facesコンポーネントのみを使用してレイアウトを実現するように試みてください。

ADF Facesコンポーネントを使用して作成したページと他のコンポーネントを使用して作成したページはアプリケーションに混在できることに注意してください。


ADF Facesコンポーネントをページに追加する手順:

  1. ビジュアル・エディタでJSFページを開きます。

  2. JDeveloperにコンポーネント・パレットが表示されない場合は、メニューから「表示」「コンポーネント・パレット」と選択します。デフォルトでは、コンポーネント・パレットはJDeveloperの右上部に表示されます。

  3. コンポーネント・パレットでドロップダウン・メニューを使用して「ADF Faces」を選択します。

    コンポーネントが、「共通コンポーネント」「レイアウト」および「操作」の3つのアコーディオン・パネルに含まれています。図2-8に、ADF Facesの共通コンポーネントを表示しているコンポーネント・パレットを示します。

    図2-8 JDeveloperのコンポーネント・パレット

    ADF Facesコンポーネントをパレットからドロップできます
  4. 使用するコンポーネントを選択し、ページにドラッグします。

    新たに追加されたコンポーネントを使用して、JDeveloperでビジュアル・エディタのページが再描画されます。ビジュアル・エディタでは、ページのコンポーネントを直接選択し、ポップアップ・メニューを使用してコンポーネントを追加できます。図2-9に、ビジュアル・エディタのページを示します。

    図2-9 「設計」タブに表示されているページ

    設計エディタに表示されているJSFページ

ヒント:

コンポーネントをパレットから構造ウィンドウに、またはソース・エディタのコードに直接ドラッグ・アンド・ドロップできます。

ソース・エディタでページを直接編集することで、いつでもコンポーネントを追加できます。ソース・エディタにページを表示するには、ページの下部の「ソース」タブをクリックします。


2.4.5 コンポーネントをページへ追加する場合の処理

コンポーネントをコンポーネント・パレットからJSFページにドラッグ・アンド・ドロップすると、対応するコードがJSFページに自動的に追加されます。このコードには、コンポーネントのレンダリングに必要なタグと一部のコンポーネント属性の値が含まれます。例2-11に、入力テキスト・コンポーネントとボタン・コンポーネントをパレットからドロップした場合のコードを示します。

例2-11 JDeveloperでJSFページに宣言的に追加されるタグ

<af:inputText label="Label 1" id="it1"/>
<af:commandButton text="commandButton 1" id="cb"/>

注意:

自動コンポーネント・バインディングを使用するよう選択した場合、ページのバッキングBeanの対応するプロパティに値がバインドされたbinding属性もJDeveloperによって追加されます。詳細は、2.4.3項「自動コンポーネント・バインディングについて」を参照してください。

必須である子コンポーネントを含むコンポーネント(表、リストなど)をドロップすると、JDeveloperでウィザードが起動され、親と各子コンポーネントを定義できます。たとえば、図2-10に、表コンポーネントと表の子である列コンポーネントの作成に使用する表ウィザードを示します。

図2-10 JDeveloperの表ウィザード

ADF Facesの表の作成に使用する表ウィザード

例2-12に、ウィザードを使用して3つの列を持つ表を作成した場合に作成されるコードを示します。各列はデータの表示にoutputTextを使用します。

例2-12 表コンポーネントの宣言コード

<af:table var="row" id="t1">
  <af:column sortable="false" headerText="col1" id="c1">
    <af:outputText value="#{row.col1}" id="ot1"/>
  </af:column>
  <af:column sortable="false" headerText="col2" id="c2">
    <af:outputText value="#{row.col2}" id="it2"/>
  </af:column>
  <af:column sortable="false" headerText="col3" id="c3">
    <af:outputText value="#{row.col3}" id="ot3"/>
  </af:column>
</af:table>

2.4.6 コンポーネント属性の設定方法

コンポーネントのページへのドロップ後、プロパティ・インスペクタ(デフォルトではJDeveloperの右下部に表示)を使用して、各コンポーネントの属性値を設定できます。


ヒント:

プロパティ・インスペクタが表示されない場合、メイン・メニューから「表示」「プロパティ・インスペクタ」と選択します。

図2-11に、inputTextコンポーネントの属性を表示しているプロパティ・インスペクタを示します。

図2-11 JDeveloperのプロパティ・インスペクタ

プロパティ・インスペクタでプロパティ値を設定できます

プロパティ・インスペクタには、同様のプロパティをグループにしたセクションがあります。たとえば、プロパティ・インスペクタでは、inputTextによく使用される属性は「共通」セクションにまとめられ、コンポーネントの動作に影響するプロパティは「動作」セクションにまとめられています。図2-12に、inputTextコンポーネントのプロパティ・インスペクタの「動作」セクションを示します。

図2-12 プロパティ・インスペクタの「動作」セクション

コンポーネントの動作に影響するプロパティ

コンポーネント属性の設定手順:

  1. ビジュアル・エディタまたは構造ウィンドウ、あるいはソース・エディタでのタグの直接選択で、コンポーネントを選択します。

  2. プロパティ・インスペクタで、設定する属性が含まれるセクションを開きます。


    ヒント:

    一部の属性は、複数のセクションに表示されます。あるセクションで値を入力または変更すると、他のセクションでもその値が変更されます。インスペクタの最上部の検索フィールドに属性名を入力して、属性を検索できます。

  3. フィールドに値を直接入力するか、フィールドにドロップダウン・リストがある場合はそのリストを使用して、値を選択します。フィールドの右にあるドロップダウン・メニューを使用して、値を設定するツールを使用することもできます。これらのツールは、特定のプロパティ・エディタ(「編集」を選択して起動)または値のEL式の作成に使用できる式ビルダー(「式ビルダー」を選択して起動)です。式ビルダーの使用の詳細は、2.5項「EL式の作成」を参照してください。

2.4.7 プロパティ・インスペクタを使用する場合の処理

プロパティ・インスペクタを使用して属性値を設定または変更すると、入力された値に合致するよう、属性のページ・ソースがJDeveloperで自動的に変更されます。


ヒント:

ソース・エディタでページを直接編集することで、いつでも属性値を変更できます。ソース・エディタにページを表示するには、ページの下部の「ソース」タブをクリックします。

2.5 EL式の作成

EL式は、属性と実行時に決まるオブジェクト値とのバインドに、ADF Facesアプリケーション全体で使用されます。式の例には、選択したユーザーのセットを参照する#{UserList.selectedUsers}、特定のユーザー名を参照する#{user.name}、ユーザーがマネージャかどうかを評価する#{user.role == 'manager'}などがあります。実行時、汎用式エバリュエータによって、これらの式に対してそれぞれListStringおよびbooleanの値が返され、コードなしで自動的に各オブジェクトとそのプロパティにアクセスします。

実行時、特定のJSF UIコンポーネント(inputTextコンポーネント、outputTextコンポーネントなど)の値は、そのvalue属性によって決まります。コンポーネントは静的テキストを値として持つことができますが、通常、value属性にランタイム・インフラストラクチャが評価するEL式を含め、表示するデータを決定します。たとえば、現在ログインしているユーザーの名前を表示するoutputTextコンポーネントで、value属性に式#{UserInfo.name}を設定できます。コンポーネントの任意の属性(value属性だけでなく)にEL式を使用して値を割り当てることができるため、動的、かつデータ駆動型のユーザー・インタフェースの作成が容易になります。たとえば、UIコンポーネントのrendered属性に#{not empty UserList.selectedUsers}などのブール値の式を使用して、表示するオブジェクトのセットが空の場合、コンポーネントを非表示にできます。オブジェクト内のUserListという名前の選択されたユーザーのリストが空の場合、rendered属性がfalseと評価され、コンポーネントがページで非表示になります。

通常のJSFアプリケーションでは、UserListのようなオブジェクトはマネージドBeanとして作成します。JSFランタイムでは、EL式でBeanを最初に参照した際に、Beanのオンデマンドのインスタンス化が管理されます。値を表示する場合、ページを表示する際にランタイムでEL式が評価され、マネージドBeanから値を得て、コンポーネントにデータが移入されます。ユーザーがUIコンポーネントのデータを更新すると、同じEL式に基づいて、JSFランタイムで該当するマネージドBeanに値が戻されます。マネージドBeanの作成および使用の詳細は、2.6項「マネージドBeanの作成と使用」を参照してください。EL式の詳細は、http://java.sun.comの「Java EE 5 tutorial」を参照してください。

2.5.1 EL式の作成方法

JDeveloperの式ビルダーを使用してEL式を宣言的に作成できます。ビルダーにはプロパティ・インスペクタからアクセスできます。

式ビルダーの使用手順:

  1. プロパティ・インスペクタで変更する属性を特定し、右端のドロップダウン・メニューを使用して「式ビルダー」を選択します。

  2. 次の機能を使用して式を作成します。

    • 「変数」ツリーを使用して、式に含める項目を選択します。ツリーには階層形式のバインディング・オブジェクトが含まれます。ツリーの各アイコンは、式で使用できる各種タイプのバインディング・オブジェクトを表します。

      ツリーの絞り込みには、ドロップダウン・フィルタを使用するか、検索フィールドに検索条件を入力します。ADF Facesで公開されているELでアクセス可能なオブジェクトは、図2-13に示すように、「JSFマネージドBean」ノードの「adfFacesContext」ノードにあります。

      図2-13 式ビルダーでのadfFacesContextオブジェクト

      adfFacesContextプロパティ

      ヒント:

      これらのオブジェクトの詳細は、ADF FacesのJavadocを参照してください。

      ツリーで項目を選択すると、その項目がEL式内の「式」ボックスに移動されます。「式」ボックスに式を直接入力することもできます。

    • 演算子ボタンを使用して、式に論理演算子または算術演算子を追加します。

    図2-14に、explorerマネージドBeanのlabelプロパティにコンポーネントのラベルの値をバインドする式の作成に使用される「式ビルダー」ダイアログを示します。

    図2-14 「式ビルダー」ダイアログ

    「式ビルダー」ダイアログ

2.5.2 EL式のマネージドBean内での使用方法

必要なEL式はJDeveloperで作成され、作成されない式は式ビルダーを使用して作成できますが、マネージドBean内でEL式にアクセスしたり、EL式を設定または起動する必要がある場合もあります。

例2-13に、EL式への参照を取得し、適合するオブジェクトを返す(または作成する)方法を示します。

例2-13 マネージドBeanからのEL式の解決

public static Object resolveExpression(String expression) {
  FacesContext facesContext = getFacesContext();
  Application app = facesContext.getApplication();
  ExpressionFactory elFactory = app.getExpressionFactory();
  ELContext elContext = facesContext.getELContext();
  ValueExpression valueExp =
     elFactory.createValueExpression(elContext, expression,
                                            Object.class);
     return valueExp.getValue(elContext);
 }

例2-14に、メソッド式を解決する方法を示します。

例2-14 マネージドBeanからのメソッド式の解決

public static Object resloveMethodExpression(String expression,
                                             Class returnType,
                                             Class[] argTypes,
                                             Object[] argValues) {
  FacesContext facesContext = getFacesContext();
  Application app = facesContext.getApplication();
  ExpressionFactory elFactory = app.getExpressionFactory();
  ELContext elContext = facesContext.getELContext();
  MethodExpression methodExpression =
            elFactory.createMethodExpression(elContext, expression, returnType,
                                             argTypes);
    return methodExpression.invoke(elContext, argValues);
  }

例2-15に、マネージドBeanで新たにオブジェクトを設定する方法を示します。

例2-15 マネージドBeanでの新たなオブジェクトの設定

public static void      (String expression, Object newValue) {
  FacesContext facesContext = getFacesContext();
  Application app = facesContext.getApplication();
  ExpressionFactory elFactory = app.getExpressionFactory();
  ELContext elContext = facesContext.getELContext();
  ValueExpression valueExp =
     elFactory.createValueExpression(elContext, expression,
                                     Object.class);

  //Check that the input newValue can be cast to the property type
  //expected by the managed bean.
  //Rely on Auto-Unboxing if the managed Bean expects a primitive
  Class bindClass = valueExp.getType(elContext);
 if (bindClass.isPrimitive() || bindClass.isInstance(newValue)) {
      valueExp.setValue(elContext, newValue);
  }
}

2.6 マネージドBeanの作成と使用

マネージドBeanは、様々な構成ファイルを使用してアプリケーションに登録されるJavaクラスです。JSFアプリケーションを起動すると、これらの構成ファイルが解析されます。Beanが使用可能になり、EL式での参照やBeanのプロパティやメソッドへのアクセスが可能になります。マネージドBeanの最初の参照時にBeanが存在しない場合、Managed Bean Creation FacilityでBeanのデフォルト・コンストラクタ・メソッドがコールされ、Beanがインスタンス化されます。プロパティが宣言されている場合は、宣言されたデフォルト値がこれに移入されます。

多くの場合、マネージドBeanでは、イベントの処理やビジネス・レイヤーにロジックを含めるよりもフロントエンドでの処理に向くデータの操作が行われます。標準JSFアプリケーションでのマネージドBeanの使用方法の詳細は、Sun社のWebサイト(http://java.sun.com)の「Java EE 5 tutorial」を参照してください。


ベスト・プラクティスのヒント:

マネージドBeanを使用して、「経理」情報のみを格納します。すべてのアプリケーション・データと処理は、アプリケーションのビジネス・レイヤーのロジックで処理される必要があります。

標準JSFアプリケーションでは、マネージドBeanはfaces-config.xml構成ファイルに登録されます。


注意:

Oracle ADF Modelデータ・バインディングおよびADF Controllerを使用する場合は、faces-config.xmlファイルではなく、ADFタスク・フローにマネージドBeanを登録する必要があります。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「Fusion WebアプリケーションでのマネージドBeanの使用」を参照してください。

2.6.1 JDeveloperでのマネージドBeanの作成方法

faces-config.xmlファイルに概要エディタを使用して、マネージドBeanの作成とJSFアプリケーションへの登録を同時に行えます。

マネージドBeanの作成および登録手順:

  1. アプリケーション・ナビゲータで、faces-config.xmlファイルを開きます。

  2. ウィンドウの下部で、「概要」タブをクリックします。

  3. 「Managed Bean」タブをクリックします。図2-15に、File Explorerアプリケーションを含むADF Facesのデモで使用されるfaces-config.xmlファイルの場合のエディタを示します。

    図2-15 faces-config.xmlファイル内のマネージドBean

    JSF構成エディタにすべてのマネージドBeanが表示されます
  4. 「追加」アイコンをクリックして「マネージドBean」表に行を追加します。

  5. 「マネージドBeanの作成」ダイアログで値を入力します。ダイアログの使用の詳細が必要な場合は、「ヘルプ」をクリックします。JDeveloperでクラス・ファイルを作成する場合は、「クラスが存在しない場合は生成」オプションを選択します。

  6. オプションでBeanに管理プロパティを追加できます。Beanがインスタンス化される際、指定した値が管理プロパティに設定されます。「Managed Bean」表でBeanを選択した状態で「新規」アイコンをクリックし、「管理プロパティ」表に行を追加します。プロパティ・インスペクタで、プロパティ名を入力します(他のフィールドはオプションです)。


    注意:

    このエディタを使用して管理プロパティを宣言できますが、対応するコードはJavaクラスに生成されません。適切なタイプのプライベート・メンバー・フィールドを作成し、コード・エディタのポップアップ・メニューの「アクセッサの生成」メニュー項目を選択して、これらのBeanプロパティに対応するgetおよびsetメソッドを生成することにより、コードを追加する必要があります。

2.6.2 JDeveloperを使用してマネージドBeanを作成する場合の処理

マネージドBeanを作成する際、Javaファイルを生成するよう選択すると、指定された名前とデフォルト・コンストラクタを使用してスタブ・クラスが自動的に作成されます。例2-16に、viewパッケージに格納されたMyBeanクラスに追加されるコードを示します。

例2-16 マネージドBean用に生成されたコード

package view;

public class MyBean {
    public MyBean() {
    }
}

ここでページに必要なロジックを追加する必要があります。このロジックは、マネージドBeanのmanaged-bean-nameを参照するEL式を使用して参照できます。たとえば、my_beanマネージドBeanのmyInfoプロパティにアクセスする場合、EL式は次のようになります。

#{my_bean.myInfo}

JDeveloperで、faces-config.xmlファイルへのmanaged-bean要素の追加も行われます。例2-17に、MyBeanクラスに作成されるmanaged-bean要素を示します。

例2-17 faces-config.xmlファイルでのマネージドBeanの構成

<managed-bean>
  <managed-bean-name>my_bean</managed-bean-name>
  <managed-bean-class>view.MyBean</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
</managed-bean>

2.7 ADF Facesソース・コードおよびJavadocの表示

ADF Faces Javadocは、JDeveloperから直接表示できます。

クラスのJavadocを表示する手順:

  1. JDeveloperのメニューから、「ナビゲート」「Javadocに移動」と選択します。

  2. 「Javadocに移動」ダイアログで、表示するクラス名を入力します。名前が正確にわからない場合、名前を入力し始めると、JDeveloperによって名前が合致するクラスのリストが表示されます。ADF Facesコンポーネントは、oracle.adf.view.richパッケージにあります。