プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発
12c (12.2.1)
E70029-02
目次へ移動
目次

前
次

3 ADF FacesとJDeveloperの概要

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

この章の内容は次のとおりです。

3.1 JDeveloperでの宣言的開発について

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

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

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

  • ページ・フローの定義

  • FaceletsページまたはJavaServer Pages (JSP)のいずれかを使用した「表示」ページの作成

  • アプリケーションのデプロイ。デプロイの詳細は、『Oracle ADFアプリケーションの管理』を参照してください。アプリケーションでADF FacesをADFモデル・レイヤー、ADFコントローラおよびADFビジネス・コンポーネントとともに使用する場合は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「Fusion Webアプリケーションのデプロイ」の章を参照してください。

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

JDeveloperには、デバッグやテストの機能も含まれています。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFコンポーネントのテストとデバッグ」の章を参照してください。

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

新規アプリケーションを作成する最初のステップは、名前を割り当て、ソース・ファイルを保存するディレクトリを指定することです。ビュー・レイヤーのみ含むアプリケーションを作成するか、ADF Facesプロジェクトを既存のアプリケーションに追加できます。

注意:

このドキュメントでは、使用されているビジネス・サービスやそれらのサービスへのバインドに関係なく、アプリケーションでADF Facesプロジェクトを作成する方法についてのみ説明します。ADF FacesをADFモデル・レイヤー、ADFコントローラおよびADFビジネス・コンポーネントとともに使用する方法の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』を参照してください。

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

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

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

  1. メニューで、「ファイル」→「新規」→「アプリケーション」を選択します。

  2. 「新規ギャラリ」で、「カスタム・アプリケーション」を選択して「OK」をクリックします。

  3. 「カスタム・アプリケーションの作成」ダイアログで、選択項目の名前、ディレクトリの場所およびパッケージ接頭辞を設定し、「次へ」をクリックします。

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

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

    ヒント:

    ADF Facesを既存のプロジェクト(JEE Webアプリケーションのビュー・プロジェクトなど)に追加することもできます。これを行うには、次の手順を実行します。

    1. プロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。

    2. 「プロジェクト・プロパティ」ダイアログで、「機能」を選択し、「追加」(緑のプラス記号)アイコンをクリックし、ADF Facesを「選択済」ペインに移動します。

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

カスタム・テンプレートを使用してアプリケーション・ワークスペースを作成し、プロジェクトに対してADF Facesを選択すると、JDeveloperによって、ADF Facesアプリケーションに必要なすべてのソースおよび構成ファイルを含むプロジェクトが作成されます。また、次のライブラリがJDeveloperでプロジェクトに追加されます。

  • JSF 2.2

  • JSTL 1.2

  • JSPランタイム

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

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

この図は周囲のテキストで説明しています

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

<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         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_3_0.xsd"
         version="3.0">
  <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機能に必要な構成は、このガイドの別の章で説明されています。たとえば、変更永続性フレームワークを使用するために必要な構成は、「JSFページでのユーザー・カスタマイズの許可」で説明されています。ADF Facesアプリケーションの包括的な情報は、「ADF Facesの構成」を参照してください。

3.3 ページ・フローの定義

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

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

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

この図は周囲のテキストで説明しています

注意:

ADFモデル・データ・バインディングおよびADFコントローラを使用する場合は、ADFタスク・フローを使用してナビゲーション・ルールを定義します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの概要」の章を参照してください。

ベスト・プラクティス

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

JSF 2.0の登場により、2つのページ間の単純なナビゲーションにはナビゲーション・ケースを作成する必要がなくなりました。すべての使用可能なルールを確認した後で一致するナビゲーション・ケースが見つからない場合、ナビゲーション・ハンドラはアクションの結果がビューIDに対応するかどうかを確認します。アクションの結果に一致するビューが見つかった場合は、一致するビューへの暗黙的なナビゲーションが行われます。JSFアプリケーションでのナビゲーション機能の詳細は、「Java EE 6 tutorial」(http://download.oracle.com/javaee/index.html)を参照してください。

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

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

始める前に:

ページ・フローに関する知識が役立つ場合があります。詳細は、「ページ・フローの定義」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、アプリケーションのfaces-config.xmlファイルをダブルクリックします。これは、デフォルトではプロジェクトのWeb Content/WEB-INFノードにあります。
  2. エディタ・ウィンドウで、「ダイアグラム」タブをクリックし、ナビゲーション・ダイアグラマを開きます。
  3. 「コンポーネント」ウィンドウが表示されていない場合は、メイン・メニューから「ウィンドウ」→「コンポーネント」を選択します。デフォルトでは、「コンポーネント」ウィンドウはJDeveloperの右上部に表示されます。
  4. 「コンポーネント」ウィンドウで、ドロップダウン・メニューを使用して「ADFタスク・フロー」を選択します。

    コンポーネントは、「ソース要素」、「コンポーネント」および「ダイアグラムの注釈」の3つのアコーディオン・パネルに含まれています。図3-3 に、JSFナビゲーション・コンポーネントが表示されている「コンポーネント」ウィンドウを示します。

    図3-3 JDeveloper内のコンポーネント

    この図は周囲のテキストで説明しています
  5. 使用するコンポーネントを選択し、ダイアグラムにドラッグします。

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

ヒント:

「概要」タブをクリックし、ナビゲーション・ルールとナビゲーション・ケースの作成を概要エディタで行うこともできます。エディタのヘルプを参照するには、「ヘルプ」をクリックするか、[F1]を押します。

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

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

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

ページ・フローの作成にダイアグラマを使用すると、JDeveloperで関連するXMLエントリがfaces-config.xmlファイルに作成されます。次のコードで、図3-2に示すナビゲーション・ルール用に生成された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>

3.4 ビュー・ページの作成

計画段階で作成したページ・フローからページ・アイコンをダブルクリックすると、実際のJSFページ・ファイルを作成できます。FaceletページまたはJSPページの作成を選択できます。Faceletページでは、拡張子*.jsfを使用します。Faceletは、JSF中心の宣言的XMLビュー定義テクノロジであり、JSPエンジンの使用の代替方法を提供します。

ADF FacesアプリケーションのJSPページを作成する場合は、拡張子*.jspxを使用するXMLベースのJSPドキュメントを作成します。XMLベースのドキュメントの使用には、次の利点があります。

  • UIコンポーネント・タグの整形式のツリーとしてのページの処理がシンプルになります。

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

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

ベスト・プラクティス

Faceletの使用には、次の利点があります。

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

  • Faceletは、JSF 2.0のプライマリ・ビュー定義テクノロジと考えられます。

  • JSF標準に対する将来のパフォーマンス拡張の一部は、Faceletでのみ使用可能になります。

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

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

この図は周囲のテキストで説明しています

ベスト・プラクティス

すべてのブラウザで正しく動作するレイアウトの作成には時間がかかる場合があります。事前定義されたクイック・レイアウトを使用して、潜在的な問題を回避します。

レイアウト・コンポーネントの追加とともに、選択したクイック・レイアウトにテーマを適用することも選択できます。これらのテーマは、クイック・スタート・レイアウトで使用されるコンポーネントの一部に色のスタイルを追加します。色および追加する場所を確認するには、「クイック・スタート・レイアウト・テーマ」を参照してください。テーマの詳細は、「スタイルおよびスキンを使用した外観のカスタマイズの概要」を参照してください

同じレイアウトをアプリケーションの多くのページで使用する場合には、ADF Facesでは事前定義済ページ・テンプレートを作成および使用できます。テンプレートを作成する場合、テンプレートの開発者はテンプレートを使用するページのレイアウトを決定するだけではなく、すべてのページに表示される静的コンテンツを含めたり、各ページで有効な値に置き換えられるプレースホルダ属性を作成できます。

たとえば、ADF FacesにはOracle Three-Column-Layoutテンプレートが含まれています。このテンプレートには、図3-5 に示すように、ブランド、ヘッダー、著作権情報などの特定のコンテンツ用の領域が含まれ、静的ロゴおよびビジー・アイコンも表示されます。

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

この図は周囲のテキストで説明しています

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

ベスト・プラクティス

テンプレートを使用して、一貫性を実現し、将来的にアプリケーションの複数のページを簡単に更新できるようにします。

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

ベスト・プラクティス

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

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

3.4.1 JSFページの作成方法

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

始める前に:

ページの作成時には様々なオプションに関する知識が役立つ場合があります。詳細は、「「表示」ページの作成」を参照してください。

JSFページを作成するには:

  1. 「アプリケーション」ウィンドウで、ページを保存するノード(ディレクトリ)を右クリックし、「新規」「ページ」を選択します。

    または

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

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

注意:

Faceletページでは任意の拡張子を使用できますが、Faceletページをカスタマイズ可能にするには.jsf拡張子を使用する必要があります。詳細は、「JSFページでのユーザー・カスタマイズの許可」を参照してください。

3.4.2 JSFページの作成時に発生する処理

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

次に、JDeveloperで最初に作成されたときのFaceletページのコードを示します。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html>
<f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
    <af:document title="DisplayCustomer.jsf" id="d1">
        <af:form id="f1"></af:form>
    </af:document>
</f:view>

次に、JDeveloperで最初に作成されたときの.jspxページのコードを示します。

<?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:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
        <af:document title="EditCustomer" id="d1">
            <af:form id="f1"></af:form>
        </af:document>
    </f:view>
</jsp:root>

クイック・レイアウトの1つを使用することを選択した場合、JDeveloperにより、レイアウトの表示に必要なコンポーネントも追加されます。たとえば、次のコードはJDeveloperで2列のレイアウトを選択した場合に生成されるものです(このレイアウトでは、最初の列はロックされ、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:af="http://xmlns.oracle.com/adf/faces/rich">
    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <f:view>
        <af:document title="EditCustomer" id="d1">
            <af:form id="f1">
                <af:panelGridLayout id="pgl1">
                    <af:gridRow height="100%" id="gr1">
                        <af:gridCell width="100px" halign="stretch"
                                     valign="stretch" id="gc1">
                            <!-- Left -->
                        </af:gridCell>
                        <af:gridCell width="100%" halign="stretch"
                                     valign="stretch" id="gc2">
                            <af:decorativeBox theme="dark" id="db2">
                                <f:facet name="center">
                                    <af:decorativeBox theme="medium" id="db1">
                                        <f:facet name="center">
                                            <!-- Content -->
                                        </f:facet>
                                    </af:decorativeBox>
                                </f:facet>
                            </af:decorativeBox>
                        </af:gridCell>
                    </af:gridRow>
                </af:panelGridLayout>
            </af:form>
        </af:document>
    </f:view>
</jsp:root>

次のコードに示すように、ダイアログの「マネージドBean」タブを使用してバッキングBeanを自動作成するよう選択した場合は、そのページ用のバッキングBeanも作成および登録され、既存のコンポーネントがその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ランタイム

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

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

  • Oracle JEWT

JDeveloperは、web.xmlファイルにエントリも追加します。次に、JSFページの作成後に作成されるweb.xmlファイルを示します。

<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 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_3_0.xsd"
         version="3.0">
  <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.adf.view.faces.bi.webapp.GraphServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>BIGAUGESERVLET</servlet-name>
    <servlet-class>oracle.adf.view.faces.bi.webapp.GaugeServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>MapProxyServlet</servlet-name>
    <servlet-class>oracle.adf.view.faces.bi.webapp.MapProxyServlet</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>
  <context-param>
    <param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
    <param-value>*.jsf;*.xhtml</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <description>If this parameter is true, there will be an automatic check of the modification date of your JSPs, and saved state will be discarded when JSP's change. It will also automatically check if your skinning css files have changed without you having to restart the server. This makes development easier, but adds overhead. For this reason this parameter should be set to false when your application is deployed.</description>
    <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <description>Whether the 'Generated by...' comment at the bottom of ADF Faces HTML pages should contain version number information.</description>
    <param-name>oracle.adf.view.rich.versionString.HIDDEN</param-name>
    <param-value>false</param-value>
  </context-param>
  <context-param>
    <description>Security precaution to prevent clickjacking: bust frames if the ancestor window domain(protocol, host, and port) and the frame domain are different. Another options for this parameter are always and never.</description>
    <param-name>org.apache.myfaces.trinidad.security.FRAME_BUSTING</param-name>
    <param-value>differentOrigin</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>oracle.adf.view.rich.geometry.DEFAULT_DIMENSIONS</param-name>
    <param-value>auto</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.FACELETS_SKIP_XML_INSTRUCTIONS</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.FACELETS_DECORATORS</param-name>
    <param-value>
      oracle.adfinternal.view.faces.facelets.rich.AdfTagDecorator
    </param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.FACELETS_RESOURCE_RESOLVER</param-name>
    <param-value>
      oracle.adfinternal.view.faces.facelets.rich.AdfFaceletsResourceResolver
    </param-value>
  </context-param>
  <context-param>
    <param-name>oracle.adf.view.rich.dvt.DEFAULT_IMAGE_FORMAT</param-name>
    <param-value>HTML5</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>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <mime-mapping>
    <extension>swf</extension>
    <mime-type>application/x-shockwave-flash</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>amf</extension>
    <mime-type>application/x-amf</mime-type>
  </mime-mapping>
</web-app>

注意:

Faceletsコンテキスト・パラメータは、Faceletsページを作成した場合にのみ作成されます。

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

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

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

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

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

3.4.3 Faceletsエンジンを使用するためのアプリケーションの更新に関する必知事項

JSF 2.1 Webアプリケーションは、FaceletsエンジンまたはJSPサーブレット・エンジンを使用して実行できます。デフォルトでは、*.jsfおよび*.xhtml拡張子を持つドキュメントはFaceletsエンジンによって処理され、*.jspおよび*.jspx拡張子を持つドキュメントはJSPエンジンによって処理されます。ただし、この動作はweb.xmlファイルでjavax.faces.FACELETS_VIEW_MAPPINGSコンテキスト・パラメータを設定することで変更できます。ADF FacesではJSPページをFaceletsエンジンで実行できるため、JSPページの既存のアプリケーションでFaceletsエンジンを使用することを決定できます。そのためには、次のコードをweb.xmlページに挿入します。

<context-param>
    <param-name>javax.faces.FACELETS_VIEW_MAPPINGS</param-name>
    <!-- Map both *.jspx and *.jsf to the Facelets engine -->
    <param-value>*.jsf; *.jspx</param-value>
  </context-param>
 
  <context-param>
    <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
    <param-value>true</param-value>
  </context-param>
 
  <context-param>
    <param-name>javax.faces.FACELETS_DECORATORS</param-name>
    <param-value>
      oracle.adfinternal.view.faces.facelets.rich.AdfTagDecorator
    </param-value>
  </context-param>
 
  <context-param>
    <param-name>
      javax.faces.FACELETS_RESOURCE_RESOLVER
    </param-name>
    <param-value>
      oracle.adfinternal.view.faces.facelets.rich.AdfFaceletsResourceResolver
    </param-value>
  </context-param>

その後、ADF Facesライブラリを再デプロイする必要があります。

Faceletsエンジンを使用するようにアプリケーションを変更した場合は、アプリケーションで、ADF Facesとは現在互換性のないJSFの部分状態保存が使用されます。次に示すエントリを明示的に追加する必要があります。

 <context-param>
    <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
    <param-value>false</param-value>
  </context-param>

この非互換性が解決されたら、エントリを削除して部分状態保存を再び有効にする必要があります。部分状態保存サポートの最新情報は、http://www.oracle.com/technetwork/developer-tools/jdev/documentation/index.htmlにある最新のリリース・ノートを確認してください。

注意:

サーブレット・エンジンからFaceletsエンジンに切り替える場合は、アプリケーションの特定の部分が予想どおりに機能しないことがあります。たとえば、カスタムJSPタグがある場合、これらのタグをFaceletsエンジンで機能させるには、再実装する必要があります。詳細は、ADF Facesのリリース・ノートを参照してください。

3.4.4 自動コンポーネント・バインディングに関する必知事項

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

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

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

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

    注意:

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

  • 新規に作成したBeanまたは選択したBeanでは、JSFページに配置した各コンポーネント・タグに対するプロパティおよびアクセッサ・メソッドが追加されます。JDeveloperでバインディング属性の値としてEL式を使用し、コンポーネント・タグとそのプロパティがバインドされます。

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

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

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

この図は周囲のテキストで説明しています

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

注意:

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

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

次に、自動コンポーネント・バインディングを使用し、forminputTextおよびbuttonコンポーネントを含む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.it1}"
                    id="inputText1"/>
      <af:button text="button 1"
                        binding="#{backing_MyFile.b1}"
                        id="b1"/>
    </af:form>
  </af:document>
</f:view>

次に、対応するバッキング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.RichButton;
 
public class MyFile {
    private RichForm f1;
    private RichDocument d1;
    private RichInputText it1;
    private RichButton b1;
 
    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 it1) {
        this.inputText1 = inputText1;
    }
 
    public RichInputText getInputText1() {
        return inputText1;
    }
 
    public void setB1(RichButton b1) {
        this.button1 = button1;
    }
 
    public RichButton getB1() {
        return b1;
    }
 
    public String b1_action() {
        // Add event code here...
        return null;
    }
}

次のfaces-config.xmlファイルに追加されたコードは、ページのバッキングBeanをマネージド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>

注意:

マネージドBeanをfaces-config.xmlファイルに登録するかわりに、Faceletを使用している場合は、登録するバッキングBeanで注釈を使用することを選択できます。マネージドBeanおよびバッキングBeanでの注釈の使用の詳細は、http://www.oracle.com/technetwork/java/index.htmlにある「Java EE 6 tutorial」を参照してください。

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

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

この図は周囲のテキストで説明しています

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

注意:

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

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

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

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

ヒント:

特定の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の右上部に表示されます。

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

    ヒント:

    「コンポーネント」ウィンドウで「ADF Faces」ページが使用可能でない場合は、ADF Facesタグ・ライブラリをプロジェクトに追加する必要があります。

    Faceletファイルの場合:

    1. プロジェクト・ノードを右クリックして、「プロジェクト・プロパティ」を選択します。

    2. 「JSPタグ・ライブラリ」を選択して、ADF Facesライブラリをプロジェクトに追加します。ヘルプを参照するには、「ヘルプ」をクリックするか、[F1]を押します。

    JSPXファイルの場合:

    1. 「コンポーネント」ウィンドウの中を右クリックし、「タグ・ライブラリの編集」を選択します。

    2. 「コンポーネント・ウィンドウのカスタマイズ」ダイアログで、「ADF Facesコンポーネント」「選択済のライブラリ」に移動し、「OK」をクリックします。

    コンポーネントは、「一般コントロール」(ボタン、アイコン、メニューなどのコンポーネントを含みます)、「テキストおよび選択」「データ・ビュー」(表やツリーなどのコンポーネントを含みます)、「メニューおよびツールバー」「レイアウト」および「操作」の6つのアコーディオン・パネルに含まれます。

    図3-8 に、ADF Facesの一般コントロールを表示している「コンポーネント」ウィンドウを示します。

    図3-8 JDeveloperの「コンポーネント」ウィンドウ

    この図は周囲のテキストで説明しています
  4. 使用するコンポーネントを選択し、ページにドラッグします。

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

ヒント:

「コンポーネント」ウィンドウからコンポーネントをドラッグし、構造ウィンドウにドロップしたり、ソース・エディタ内のコードに直接ドロップすることもできます。

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

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

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

<af:inputText label="Label 1" id="it1"/>
<af:button text="button 1" id="b1"/>

注意:

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

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

図3-9 JDeveloperの表ウィザード

この図は周囲のテキストで説明しています

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

<af:table var="row" rowBandingInterval="0" 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>

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

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

ヒント:

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

図3-10 に、inputTextコンポーネントの属性が表示されている「プロパティ」ウィンドウを示します。

図3-10 JDeveloperの「プロパティ」ウィンドウ

この図は周囲のテキストで説明しています

「プロパティ」ウィンドウには、類似のプロパティをグループにした各セクションがあります。たとえば、「プロパティ」ウィンドウでは、inputTextによく使用される属性は「共通」セクションにまとめられ、コンポーネントの動作に影響するプロパティは「動作」セクションにまとめられています。図3-11 に、inputTextコンポーネントの「プロパティ」ウィンドウにある「動作」セクションを示します。

図3-11 「プロパティ」ウィンドウの「動作」セクション

この図は周囲のテキストで説明しています

始める前に:

ページの作成時には様々なオプションに関する知識が役立つ場合があります。詳細は、「「表示」ページの作成」を参照してください。

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

  1. ビジュアル・エディタまたは「構造」ウィンドウ、あるいはソース・エディタでのタグの直接選択で、コンポーネントを選択します。
  2. 「プロパティ」ウィンドウで、設定する属性が含まれているセクションを開きます。

    ヒント:

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

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

    図3-12 プロパティ・ツールとヘルプ

    この図は周囲のテキストで説明しています

3.4.8 「プロパティ」ウィンドウを使用したときに行われる処理

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

ヒント:

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

3.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の作成と使用の詳細は、「マネージドBeanの作成と使用」を参照してください。EL式の詳細は、http://www.oracle.com/technetwork/java/index.htmlにあるJava EE 6チュートリアルを参照してください。

注意:

EL式を編集可能コンポーネントのvalue属性に使用している場合は、そのコンポーネントに対応する設定メソッドが必要です。そうでないと、EL式は読取り専用と評価され、値の更新は許可されません。

たとえば、ページにinputTextコンポーネント(IDはit1)があり、その値が#{myBean.inputValue}に設定されているとします。inputText値を更新するには、myBeanマネージドBeanに次のような取得および設定メソッドが必要です。

    public void setIt1(RichInputText it1) {
        this.it1 = it1;
    }
 
    public RichInputText getIt1() {
        return it1;
    }

標準のEL到達可能オブジェクトおよびオペランドとともに、ADF FacesはEL関数タグを提供します。これらは、EL式で使用できる特定の機能を提供するタグです。書式タグを使用して文字列メッセージにパラメータを追加でき、タイム・ゾーン・タグを使用して、タイム・ゾーンを返すことができます。書式タグの詳細は、「EL書式タグの使用方法」を参照してください。タイム・ゾーン・タグの詳細は、「inputDateコンポーネントなしでのタイム・ゾーンの選択に関する必知事項」を参照してください。

3.5.1 EL式の作成方法

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

始める前に:

EL式に関する知識が役立つ場合があります。詳細は、「EL式の作成」を参照してください。

式ビルダーの使用手順:

  1. 「プロパティ」ウィンドウで、変更する属性を見つけて、右端のドロップダウン・メニューを使用して「式ビルダー」を選択します。
  2. 次の機能を使用して式を作成します。
    • 「変数」ドロップダウンを使用して、式に含める項目を選択します。これらの項目は、階層形式のバインディング・オブジェクトであるツリーに表示されます。ツリーの各アイコンは、式で使用できる各種タイプのバインディング・オブジェクトを表します。

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

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

      この図は周囲のテキストで説明しています

      ヒント:

      これらのオブジェクトの詳細は、Oracle ADF Faces Java APIリファレンスを参照してください。

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

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

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

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

    この図は周囲のテキストで説明しています

    ヒント:

    EL式を作成する正しい構文の使用の詳細は、http://download.oracle.com/javaee/index.htmlの「Java EE 6 tutorial」を参照してください。

3.5.2 EL書式タグの使用方法

ADF EL書式タグでは、プレースホルダ・パラメータを使用するテキストを作成でき、このテキストを、Stringを受け取るコンポーネント属性の値として使用できます。実行時に、プレースホルダはパラメータ値で置換されます。

たとえば、現在のユーザーの名前がマネージドBeanに格納され、メッセージ内でその名前をoutputTextコンポーネントの値として表示するとします。次に示すように、formatStringタグを使用できます。

<af:outputText value="#{af:formatString('The current user is: {0},
  someBean.currentUser)}" />

この例では、formatStringタグはキーが0である1つのパラメータを受け取り、値someBean.currentUserに解決します。

formatStringタグおよびformatNamedタグという2つのタイプの書式タグが使用可能です。formatStringタグは索引付きパラメータを使用しますが、formatNamedタグは名前付きパラメータを使用します。タイプごとに4つのタグがあり、それぞれ異なる数のパラメータ(最大4)を受け取ります。たとえば、formatString2タグは2つの索引付きパラメータを受け取り、formatNamed4タグは4つの名前付きパラメータを受け取ります。

formatNamedタグを使用する場合は、キーと値の両方を設定します。次の例に、formatNamed2タグを使用して特定のディスク上のファイル数を表示するメッセージを示します。このメッセージには2つのパラメータが含まれます。

<af:outputText value="#{af:formatNamed2(
  'The disk named {disk}, contains {fileNumber} files', 'disk', bean.disk, 'fileNumber', bean.fileNumber)}" />

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

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

次のコードに、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);
 }

次のコードに、メソッド式を解決する方法を示します。

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);
  }

次のコードに、マネージド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);
  }
}

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

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

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

ベスト・プラクティス

マネージドBeanを使用して、現在のユーザーなどのブックキーピング情報のみを格納します。すべてのアプリケーション・データおよび処理データは、アプリケーションのビジネス・レイヤーのロジックによって処理される必要があります。

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

注意:

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

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

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

始める前に:

マネージドBeanに関する知識が役立つ場合があります。詳細は、「マネージドBeanの作成と使用」を参照してください。

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

  1. 「アプリケーション」ウィンドウで、アプリケーションのfaces-config.xmlをダブルクリックします。
  2. エディタ・ウィンドウで、「概要」タブをクリックします。
  3. 概要エディタで、「マネージドBean」ナビゲーション・タブをクリックします。

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

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

    この図は周囲のテキストで説明しています
  4. 「追加」アイコンをクリックして「マネージドBean」表に行を追加します。
  5. 「マネージドBeanの作成」ダイアログで値を入力します。ダイアログの使用の詳細が必要な場合は、「ヘルプ」をクリックします。JDeveloperでクラス・ファイルを作成する場合は、「クラスが存在しない場合は生成」オプションを選択します。

    注意:

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

    • 常に、できるかぎり狭いスコープを使用すること。

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

    • sessionScopeスコープは、ユーザー情報やコンテキスト情報などのセッション全体に関係する情報にのみ使用します。あるページから別のページへの値の受渡しには、sessionScopeスコープは使用しないようにします。

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

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

    注意:

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

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

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

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要素の追加も行われます。

<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>

3.6.3 コンポーネント・バインディングおよびマネージドBeanに関する必知事項

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

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

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

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

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

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

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

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

3.7 ADF Faces Javadocの表示

ADF Facesを処理する際に、ADF FacesクラスのJavadocを表示することが必要になる場合があります。JavadocはJDeveloperから表示できます。

3.7.1 ADF Facesのソース・コードおよびJavadocの表示方法

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

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

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

    ヒント:

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