ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド
11gリリース1 (11.1.1.7.0)
B52029-07
  目次へ移動
目次

前
 
次
 

2 ADF Faces概説

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

この章では、次の項目について説明します。

2.1 JDeveloperでの宣言的開発

JDeveloper 11gを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モデル・レイヤー、ADFコントローラおよびADF Business ComponentsとADF Facesを組み合せた使用方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。ADFモデル・レイヤー、EJBおよびJPAとADF Facesを組み合せた使用の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Java EE開発者ガイド』を参照してください。


  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で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 = 'UTF-8'?><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>
</web-app>

特定のADF Faces機能に必要な構成は、このガイドの別の章で説明されています。たとえば、変更永続性フレームワークを使用するために必要な構成は、第33章「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でのナビゲーションの設定

注意:

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



ベスト・プラクティス:

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


JSFアプリケーションでのナビゲーション機能の詳細は、http://www.oracle.com/technetwork/java/index.htmlのJava EE 5チュートリアルを参照してください。

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

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


注意:

このダイアグラマでは、JSPおよびJSPXファイルとして作成されるページのみサポートされます。XHTMLページのナビゲーションを作成する必要がある場合は、XMLを手動コーディングする必要があります。


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

  1. アプリケーション・ナビゲータで、アプリケーションのfaces-config.xmlファイルをダブルクリックします。これは、デフォルトではWeb Content/WEB-INFノードにあります。

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

  3. コンポーネント・パレットが表示されない場合は、メイン・メニューから「表示」→「コンポーネント・パレット」を選択します。デフォルトでは、コンポーネント・パレットは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-2に、図2-2に示すナビゲーション・ルール用に生成されたXMLを示します。

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

<navigation-rule>
  <from-view-id>/DisplayCustomer.jspx</from-view-id>
  <navigation-case>
    <from-outcome>edit</from-outcome>
    <to-view-id>/EditCustomer.jspx</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 ビュー・ページの作成

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


ベスト・プラクティス:

XMLベースのドキュメントの使用には、次の利点があります。

  • ページがUIコンポーネント・タグのツリーとして整理されるため、ページの処理が簡素化します。

  • Javaコードとコンポーネント・タグの混在を防げます。

  • ドキュメント作成やレポート監査のためのページの解析が容易になります。


アプリケーションでJSPではなくFaceletsを使用する場合は、かわりにXHTMLファイルを作成できます。Faceletsは、JSPエンジンを使用する際の代替方法となる、JSF中心の宣言XMLビュー定義テクノロジです。


ベスト・プラクティス:

次のものを利用するには、Faceletsを使用します。

  • FaceletsレイヤーはJSF専用に作成されているため、タグのコンパイルおよび実行時のオーバーヘッドの軽減とパフォーマンスの向上が実現します。

  • Faceletsは、JSF 2.0の主ビュー定義テクノロジとみなされます。

  • さらなるパフォーマンスの向上はFaceletsでしか得られません。


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

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

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

レイアウト・コンポーネントの追加に加えて、テーマを適用してクイック・レイアウトを選択することもできます。これらのテーマにより、クイック・スタート・レイアウトで使用するコンポーネントの一部に色のスタイルが追加されます。色および色の追加場所を確認するには、付録E「クイック・スタート・レイアウト・テーマ」を参照してください。テーマの詳細は、20.3.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を使用すると、ページ上のコンポーネントにプログラムからアクセスできます。バッキングBeanとJSF JSPページの使用の詳細は、2.4.3項「自動コンポーネント・バインディングについて」を参照してください。


ベスト・プラクティス:

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


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

2.4.1 JSF JSPページの作成方法

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

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

  1. アプリケーション・ナビゲータで、ページを保存するディレクトリを右クリックし、「新規」を選択ます。「新規ギャラリ」で「Web層」ノードを展開し、「JSF」「JSFページ」を選択して、「OK」をクリックします。

    または

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

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

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

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

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

<?xml version='1.0' encoding='UTF-8'?>
<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=UTF-8"/>
  <f:view>
    <af:document id="d1">
      <af:form id="f1"></af:form>
    </af:document>
  </f:view>
</jsp:root>

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

図2-4 2列レイアウト

<?xml version='1.0' encoding='UTF-8'?>
<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=UTF-8"/>
  <f:view>
    <af:document id="d1">
      <af:form id="f1">
        <af:panelStretchLayout startWidth="100px" id="psl1">
          <f:facet name="start"/>
          <f:facet name="center">
            <!-- id="af_twocol_left_sidebar_stretched"   -->
            <af:decorativeBox theme="dark" id="db2">
              <f:facet name="center">
                <af:decorativeBox theme="medium" id="db1">
                  <f:facet name="center"/>
                </af:decorativeBox>
              </f:facet>
            </af:decorativeBox>
          </f:facet>
        </af:panelStretchLayout>
      </af:form>
    </af:document>
  </f:view>
</jsp:root>

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

例2-5 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

  • ADF DVT Facesデータバインディング・ランタイム

また、例2-6に示すように、JDeveloperによってエントリがweb.xmlファイルに追加されます。

例2-6 JSF JSPページの作成後のweb.xmlファイルのコード

<?xml version = '1.0' encoding = 'UTF-8'?>
<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">
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>oracle.adf.view.rich.versionString.HIDDEN</param-name>
    <param-value>false</param-value>
  </context-param>
  <filter>
    <filter-name>trinidad</filter-name>
    <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>trinidad</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>resources</servlet-name>
    <servlet-class>
      org.apache.myfaces.trinidad.webapp.ResourceServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BIGRAPHSERVLET</servlet-name>
    <servlet-class>
     oracle.adfinternal.view.faces.bi.renderkit.graph.GraphServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BIGAUGESERVLET</servlet-name>
    <servlet-class>
     oracle.adfinternal.view.faces.bi.renderkit.gauge.GaugeServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>MapProxyServlet</servlet-name>
    <servlet-class>
      oracle.adfinternal.view.faces.bi.renderkit.geoMap.servlet.MapProxyServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>GatewayServlet</servlet-name>
    <servlet-class>
      oracle.adfinternal.view.faces.bi.renderkit.graph.FlashBridgeServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/adf/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/afr/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>BIGRAPHSERVLET</servlet-name>
    <url-pattern>/servlet/GraphServlet/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>BIGAUGESERVLET</servlet-name>
    <url-pattern>/servlet/GaugeServlet/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>MapProxyServlet</servlet-name>
    <url-pattern>/mapproxy/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/bi/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>GatewayServlet</servlet-name>
    <url-pattern>/flashbridge/*</url-pattern>
  </servlet-mapping>
</web-app>

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

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

<?xml version="1.0" encoding="UTF-8"?>
<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-8のようなtrinidad-config.xmlファイルのエントリによって、アプリケーションのユーザー・インタフェース(UI)コンポーネントで使用されるデフォルト・スキンが定義されます。

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

<?xml version="1.0" encoding="UTF-8"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>skyros</skin-family>
  <skin-version>v1</skin-version>
</trinidad-config>

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

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

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

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

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

  • バッキングBeanのマネージドBeanエントリがfaces-config.xmlファイルに作成されます。デフォルトでは、マネージドBeanの名前はbacking_<page_name>で、Beanはrequestスコープを使用します(スコープの詳細は、4.6項「オブジェクト・スコープ・ライフサイクル」を参照)。


    注意:

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


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

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

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

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

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

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


注意:

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


たとえば、myfile.jspxというファイル名でJSPを作成したとします。JDeveloperによるデフォルトのバッキングBeanの自動作成を選択した場合は、JDeveloperによって、view.backing.Myfile.javaというバッキングBeanが作成され、ViewControllerプロジェクトの\srcディレクトリに配置されます。このバッキングBeanはfaces-config.xmlでマネージドBeanとして構成され、デフォルトのマネージドBean名はbacking_myfileとなります。

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

例2-9 自動コンポーネント・バインディングを使用する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.cb1}"
                        id="cb1"/>
    </af:form>
  </af:document>
</f:view>

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

例2-10 自動コンポーネント・バインディングを使用するバッキング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 cb1;
 
    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 setCb1(RichCommandButton cb1) {
        this.commandButton1 = commandButton1;
    }
 
    public RichCommandButton getCb1() {
        return cb1;
    }
 
    public String cb1_action() {
        // Add event code here...
        return null;
    }
}

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

例2-11 バッキング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>

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

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

JDeveloperソース・エディタ

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


注意:

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


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

2.4.4 Facelets XHTMLページの作成方法

XHTMLファイルを作成するには、「Faceletページの作成」ダイアログを使用します。

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

  1. アプリケーション・ナビゲータで、ページを保存するディレクトリを右クリックし、「新規」を選択ます。「新規ギャラリ」でWeb層ノードを展開し、「Facelets」「Faceletページ」を選択して、「OK」をクリックします。


    ヒント:

    Faceletsがリストされているテクノロジでない場合は、「新規ギャラリ」の「すべてのテクノロジ」タブをクリックします。


  2. 「Faceletページの作成」ダイアログを完了します。ヘルプを参照するには、ダイアログで「ヘルプ」をクリックします。

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

「Faceletページの作成」ダイアログを使用してXHTMLページを作成すると、JDeveloperによって物理ファイルが作成され、コンポーネント・ライブラリのインポートとページの表示に必要なコードが追加されます。例2-3に、JDeveloperで最初に作成されたときの.xthmlページを示します。

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EE"
         "http://www.w3.org/TR/xhtml1/DTD/xhtall-transitional.dtd">  
<f:view xmlns="http://www.w3.org/1999/xhtml"
        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">
  <af:document>
    <af:form/>
  </af:document>
</f:view>

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

  • Faceletsランタイム

  • ADF Facesランタイム11

  • ADF Commonランタイム

  • ADF DVT Facesランタイム

  • Oracle JEWT

  • ADF DVT Facesデータバインディング・ランタイム

また、例2-13に示すように、JDeveloperによってエントリがweb.xmlファイルに追加されます。

例2-13 JSF XHTMLページの作成後のweb.xmlファイルのコード

<?xml version = '1.0' encoding = 'UTF-8'?>
<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">
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>oracle.adf.view.rich.versionString.HIDDEN</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.trinidad.FACELETS_VIEW_MAPPINGS</param-name>
    <param-value>*.xhtml</param-value>
  </context-param>
  <context-param>
    <param-name>facelets.SKIP_XML_INSTRUCTIONS</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.trinidad.ALTERNATE_VIEW_HANDLER</param-name>
    <param-value>
      org.apache.myfaces.trinidadinternal.facelets.TrinidadFaceletViewHandler
    </param-value>
  </context-param>
  <context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>facelets.SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>facelets.DECORATORS</param-name>
    <param-value>
      oracle.adfinternal.view.faces.facelets.rich.AdfTagDecorator
    </param-value>
  </context-param>
  <context-param>
    <param-name>facelets.RESOURCE_RESOLVER</param-name>
    <param-value>
      oracle.adfinternal.view.faces.facelets.rich.AdfFaceletsResourceResolver
    </param-value>
  </context-param>
  <filter>
    <filter-name>trinidad</filter-name>
    <filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>trinidad</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <servlet-name>resources</servlet-name>
    <servlet-class>
      org.apache.myfaces.trinidad.webapp.ResourceServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BIGRAPHSERVLET</servlet-name>
    <servlet-class>
      oracle.adfinternal.view.faces.bi.renderkit.graph.GraphServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BIGAUGESERVLET</servlet-name>
    <servlet-class>
      oracle.adfinternal.view.faces.bi.renderkit.gauge.GaugeServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>MapProxyServlet</servlet-name>
    <servlet-class>
      oracle.adfinternal.view.faces.bi.renderkit.geoMap.servlet.MapProxyServlet
    </servlet-class>
  </servlet>
  <servlet>
    <servlet-name>GatewayServlet</servlet-name>
    <servlet-class>
      oracle.adfinternal.view.faces.bi.renderkit.graph.FlashBridgeServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/adf/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/afr/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>BIGRAPHSERVLET</servlet-name>
    <url-pattern>/servlet/GraphServlet/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>BIGAUGESERVLET</servlet-name>
    <url-pattern>/servlet/GaugeServlet/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>MapProxyServlet</servlet-name>
    <url-pattern>/mapproxy/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>resources</servlet-name>
    <url-pattern>/bi/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>GatewayServlet</servlet-name>
    <url-pattern>/flashbridge/*</url-pattern>
  </servlet-mapping>
</web-app>

例2-14に示すように、ビュー・ハンドラのfaces-config.xmlファイルにもエントリが作成されます。

例2-14 XHTMLページで生成されたfaces-config.xmlファイル

<?xml version="1.0" encoding="UTF-8"?>
<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-15のようなtrinidad-config.xmlファイルのエントリによって、アプリケーションのユーザー・インタフェース(UI)コンポーネントで使用されるデフォルト・スキンが定義されます。

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

<?xml version="1.0" encoding="UTF-8"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>skyros</skin-family>
  <skin-version>v1</skin-version>
</trinidad-config>

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

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

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


ヒント:

特定のADF Facesコンポーネントの追加および使用の詳細は、第III部「ADF Facesコンポーネントの使用」を参照してください。



注意:

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

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


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

  1. アプリケーション・ナビゲータで、JSFページをダブルクリックし、エディタでそれを開きます。

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

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

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

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

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

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

    図2-9 ビジュアル・エディタに表示されるページ

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

ヒント:

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

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


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

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

例2-16 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-17に、ウィザードを使用して3つの列を持つ表を作成した場合に作成されるコードを示します。各列はデータの表示にoutputTextを使用します。

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

<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="ot2"/>
  </af:column>
  <af:column sortable="false" headerText="col3" id="c3">
    <af:outputText value="#{row.col3}" id="ot3"/>
  </af:column>
</af:table>

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

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


ヒント:

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


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

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

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

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

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

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

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

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

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


    ヒント:

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


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

    図2-13 プロパティのツールおよびヘルプ

    プロパティのツールおよびヘルプ

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

プロパティ・インスペクタを使用して属性値を設定または変更すると、入力された値に合致するよう、属性のページ・ソースが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://www.oracle.com/technetwork/java/index.htmlのJava EE 5チュートリアルを参照してください。

2.5.1 EL式の作成方法

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

式ビルダーの使用手順:

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

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

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

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

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

      adfFacesContextプロパティ

      ヒント:

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


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

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

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

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

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

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

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

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

例2-18マネージド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-19に、メソッド式を解決する方法を示します。

例2-19 マネージド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-20に、マネージドBeanで新たにオブジェクトを設定する方法を示します。

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

public static void setObject(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が存在しない場合、マネージドBean作成機能によってBeanのデフォルト・コンストラクタ・メソッドがコールされ、Beanがインスタンス化されます。また、プロパティが宣言されると、宣言されたデフォルトの値が移入されます。

多くの場合、マネージドBeanは、フロントエンドで処理することが最適なイベントやデータ操作を処理します。標準JSFアプリケーションでのマネージドBeanの使用方法の詳細は、http://www.oracle.com/technetwork/java/index.htmlのJava EE 5チュートリアルを参照してください。


ベスト・プラクティス:

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


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


注意:

ADFモデル・データ・バインディングおよびADFコントローラを使用する場合は、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. 概要エディタで、「マネージドBean」タブをクリックします。

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

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

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

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


    注意:

    マネージドBeanを登録するスコープまたは値を格納するスコープを決める場合、次の点に注意してください。

    • 可能なかぎり、狭いスコープを常に使用するようにします。

    • マネージドBeanがコンポーネント・インスタンスを受け取り、返すことにより、コンポーネント・バインディングに参加する場合(つまり、ページのUIコンポーネントがbinding属性を使用してBeanのコンポーネント・プロパティにバインドする場合)は、マネージドBeanをrequestまたはbackingBeanスコープに格納する必要があります。これらのスコープのいずれかに格納できない場合(たとえば、高可用性の理由によりsessionスコープに格納する必要がある場合)は、ComponentReference APIを使用する必要があります。詳細は、2.6.3項「コンポーネント・バインディングおよびマネージドBeanについて」を参照してください。

    • sessionスコープは、セッション全体に関連する情報(ユーザー情報やコンテキスト情報など)にのみ、または高可用性の理由により使用します。ページ間で値を渡すためにsessionスコープを使用しないでください。

    異なるオブジェクト・スコープの詳細は、4.6項「オブジェクト・スコープ・ライフサイクル」を参照してください。


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


    注意:

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


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

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

例2-21 マネージド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-22に、MyBeanクラスに作成されるmanaged-bean要素を示します。

例2-22 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.6.3 コンポーネント・バインディングおよびマネージドBeanについて

マネージドBeanに関する問題を回避するには、Beanでコンポーネント・バインディングを使用する必要がある場合(コンポーネントのbinding属性を使用)、Beanをrequestスコープに格納する必要があります。(アプリケーションでFusionテクノロジ・スタックを使用する場合は、backingBeanスコープに格納する必要があります。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のFusion WebアプリケーションでのマネージドBeanの使用に関する項を参照してください。)ただし、BeanをrequestまたはbackingBeanスコープに格納できない状況が発生する場合もあります。たとえば、sessionスコープに格納されているマネージドBeanがあり、クラスタ環境にデプロイできるため、シリアライズ可能なインタフェースを実装する必要があるとします。これらがシリアライズ可能な場合、リクエスト時に変更されるマネージドBeanは、他のサーバーに分散してフェイルオーバーできます。ただし、ADF Facesコンポーネント(一般的にはJSFコンポーネント)はシリアライズできません。このため、シリアライズされたマネージドBeanがコンポーネント・バインディングを使用してコンポーネントにアクセスしようとすると、参照コンポーネントはシリアライズできないため、Beanのシリアライズは失敗します。ADF Facesコンポーネントはスレッド・セーフではないため、シリアライズされたマネージドBeanにバインドされたコンポーネントに関するスレッドの安全性の問題も発生します。

UIコンポーネント・インスタンスへのコンポーネント参照を、requestまたはbackingBeanスコープを使用していないバッキングBeanに格納する必要がある場合は、Trinidad ComponentReference APIを使用して、コンポーネント・インスタンスへの参照を格納する必要があります。UIComponentReference.newUIComponentReference()メソッドでは、現在のページでUIComponentインスタンスを取得するのに使用可能な、シリアライズされた参照オブジェクトが作成されます。例2-23に、マネージドBeanがUIComponentReference APIを使用して検索フィールドの値をどのように取得および設定するかを示します。

例2-23 セッション有効範囲のマネージドBeanによるUIComponentReference APIの使用

...
private ComponentReference<RichInputText> searchField;
...
public void setSearchField(RichInputText searchField)
{
 if( this.searchField == null)
 this.searchField = ComponentReference.newUIComponentReference(searchField);
}
 
public RichInputText getSearchField()
{
 return searchField ==null ? null : searchField.getComponent();
}
....

UIComponentReference APIを使用する場合は、次の点に注意してください。

  • APIは、リクエストされたスレッドでコールされるかぎりスレッド・セーフです。

  • 渡されるADF FacesコンポーネントにはIDが必要です。

  • コンポーネントがネーミング・コンテナ間で移動されるか、祖先のネーミング・コンテナのいずれかのIDが変更された場合、参照は中断します。

UIComponentReference APIの詳細は、Trinidad JavaDocを参照してください。

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

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

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

  1. メイン・メニューから、「ナビゲート」→「Javadocに移動」を選択します。

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


    ヒント:

    Javaクラス・ファイルでは、カーソルを名前または関数の上に置いて、[Ctrl]を押しながら[D]を押すと、Javadocのクラス名参照またはJavaScript関数コールに直接移動できます。