Oracle® Mobile Application Framework Oracle Mobile Application Frameworkでのモバイル・アプリケーションの開発 2.4.2.0.0 E91953-01 |
|
![]() 前 |
![]() 次 |
この章の内容は次のとおりです。
MAF AMXフレームワークはMAF内で動作して、すべてのプラットフォームでまったく同じように動作する機能の作成に必要なUIコンポーネントを提供します。
MAF AMXは、サポートされるすべてのプラットフォームで動作が同一となるアプリケーション機能を作成できる一連のUIコンポーネントを提供するモバイル・アプリケーション・フレームワーク(MAF)内のサブフレームワークです。MAF AMXでは、ページ・エディタへのドラッグにより、UIコンポーネントを宣言的に使用できます。一般的なMAF AMXアプリケーション機能には、様々なパス経由でナビゲートできる、相互に接続されたいくつかのページが含まれます。
注意:
モバイル・デバイスのインタフェースを開発する際には、画面領域が非常に限られているということを常に意識する必要があります。また、一部のモバイル・デバイスではタッチスクリーンが使用できません。
詳細は、次を参照してください。
タスク・フローでは、アプリケーション内のAMXページ間をユーザーが移動する方法を定義します。バインド・タスク・フローとバインドなしタスク・フローの両方を備えたMAF AMXアプリケーション機能を作成できます。
タスク・フローにより、MAF AMXページ間のナビゲーションを定義できます。JDeveloperのアプリケーション・ワークスペース(「MAFアプリケーションの作成」を参照)を使用してタスク・フローを設計することにより、MAF AMXアプリケーション機能のユーザー・インタフェースの作成を開始できます。MAF AMXでは、ナビゲーション・ケースおよびルールを使用してタスク・フローを定義します。これらの定義は、ViewController-task-flow.xml
というデフォルトの名前のファイルに格納されています(「ViewController-task-flow.xmlファイルに関する必知事項」を参照)。
(開発コンピュータのjdev_install
/jdeveloper/jdev/extensions/oracle.maf/Samples
ディレクトリ内のPublicSamples.zip
ファイルにある) NavigationというMAFサンプル・アプリケーションには、循環ナビゲーション、ルーターなど様々なナビゲーション技術の使用方法が示されています。
MAFでは、バインド・タスク・フローとバインドなしタスク・フローの両方を持つMAF AMXアプリケーション機能を作成できます。「バインド・タスク・フローおよびバインドなしタスク・フローに関する必知事項」で説明されているように、バインド・タスク・フローはタスク・フロー定義とも呼ばれ、アプリケーションの再利用可能な部分を表します。MAFでは、バインド・タスク・フローにはエントリ・ポイントが1つありますが、終了ポイントはありません。バインド・タスク・フローには、アクティビティと制御フロー・ルールの独自のコレクションに加え、独自のメモリー・スコープとマネージドBean存続期間が含まれます。他のバインド・タスク・フロー特性として、入力パラメータの受入れ(「バインド・タスク・フローへのパラメータ渡し」)や戻り値の生成(「バインド・タスク・フローの戻り値の構成」)などがあります。
独自のアプリケーション機能のバインド・タスク・フローを作成するには、MAF AMXタスク・フロー・デザイナを使用します。タスク・フローの概要エディタと同様、このツールにはダイアグラマ(「MAFタスク・フロー・ダイアグラマに関する必知事項」を参照)が含まれており、ここで、「コンポーネント」ウィンドウからアクティビティと制御フローをドラッグ・アンド・ドロップすることにより(「タスク・フロー・アクティビティおよび制御フローに関する必知事項」)、タスク・フローを構築します。その後、「プロパティ」ウィンドウを使用して、これらのアクティビティとそれらの間の遷移を定義します。
タスク・フローがすでに作成されている場合を除き、MAFは、新しいMAF AMXページが作成されると、自動的にデフォルトのバインドなしタスク・フロー(adfc-mobile-config.xml
ファイル)を生成します。
各タスク・フローはアプリケーション機能としてMAFアプリケーションに追加できます。「アプリケーション機能のコンテンツをMAF AMXページまたはタスク・フローとして定義する方法」を参照してください。
maf-feature.xml
ファイルからバインド・タスク・フローを作成するか、タスク内の手順に従って、「新規ギャラリ」からタスクフローを作成します。
タスク・フローは、タスク・フロー自体と複数のアクティビティ、そしてそれらのアクティビティ間の制御フロー・ルールから構成されます(「タスク・フロー・アクティビティおよび制御フローに関する必知事項」を参照)。通常、アクティビティの多くがフロー内の異なるページを示すビュー・アクティビティです。たとえば、ページのレンダリング前などにメソッドや操作をコールする必要がある場合は、メソッド・コール・アクティビティをそのアクティビティから次の適切なアクティビティまでの制御フロー・ケースとともに使用します。別なタスク・フローをコールする場合は、タスク・フロー・コール・アクティビティを使用します。フローにブランチ化が必要な場合は、ルーター・アクティビティを使用します。バインド・タスク・フローの最後で、リターン・アクティビティを使用してフローを終了し、そのバインド・タスク・フローをコールしたフローに制御を戻します。
ナビゲーション・ダイアグラマを使用して、MAF AMXアプリケーション機能のバインド・タスク・フローを宣言的に作成します。ダイアグラマを使用すると、JDeveloperによって、MAF AMXアプリケーション機能でナビゲーションが機能するために必要なXMLメタデータがViewController-task-flow.xml
ファイル(デフォルト)に作成されます。
始める前に:
タスク・フローを設計するには、MAFアプリケーションにビュー・コントローラ・プロジェクト・ファイル(「MAFアプリケーション開発のスタート・ガイド」を参照)が含まれている必要があります。
MAFでタスク・フローを作成するには、次の2つの方法があります。
バインド・タスク・フローはmaf-feature.xml
ファイルから作成できます。「アプリケーション機能のコンテンツをMAF AMXページまたはタスク・フローとして定義する方法」を参照してください。
JDeveloperの「新規ギャラリ」を使用できます。次の手順を参照してください。
「新規ギャラリ」からタスク・フローを作成するには:
JDeveloperのトップレベル・メニューから「ファイル」をクリックし、「新規」→「ギャラリから」を選択します。
図に示すように、「新規ギャラリ」で、「クライアント層」ノードを開き、「モバイル・アプリケーション・フレームワーク」→「MAFタスク・フロー」の順に選択します。「OK」をクリックします。
「MAFタスク・フローの作成」ダイアログ(図13-2を参照)で、新しいタスク・フローのファイル名と場所を指定して「OK」をクリックし、図13-3に示すナビゲーション・ダイアグラマで新しい<Name>
-flow.xml
ファイルを開きます。
注意:
タスク・フローは、MAFアプリケーションのビュー・コントローラ・プロジェクトのHTMLルート内に作成する必要があります。
注意:
同じパターンですでに存在するバインド・タスク・フローの数に従って、JDeveloperによってタスク・フローの数が増分されます。
「コンポーネント」ウィンドウで、「MAFタスク・フロー」を選択します。
ヒント:
「コンポーネント」ウィンドウが表示されていない場合は、メイン・メニューから「ウィンドウ」→「コンポーネント」を選択します。デフォルトでは、「コンポーネント」ウィンドウはJDeveloperの右上部に表示されます。
「MAFタスク・フロー」→「コンポーネント」を選択し、使用するコンポーネントを選択してダイアグラムにドラッグ・アンド・ドロップします。図に示すように、JDeveloperでは新たに追加されたコンポーネントを使用してダイアグラムが再描画されます。
タスク・フローへのアクティビティの追加方法の詳細は、「タスク・フロー・アクティビティの追加および使用方法」を参照してください。
制御フローの追加方法の詳細は、「制御フローの定義方法」を参照してください。
新しいタスク・フローの動作を定義する方法の詳細は、「新しいバインド・タスク・フローの動作に関する必知事項」を参照してください。
「概要」タブを開き、概要エディタを使用してナビゲーション・ルールとナビゲーション・ケースの作成することもできます。概要エディタを使用したナビゲーション作成の詳細は、[F1]キーで参照できます。
また、「ソース」エディタでページを直接編集して、タスク・フロー・ファイルに手動で要素を追加することもできます。「ソース」エディタでファイルを開くには、「ソース」タブをクリックします。
注意:
手動でタスク・フロー・ファイルを編集する場合は、MAF AMXページ、JavaScriptファイルおよびCSSファイルを参照するすべてのドキュメント・ファイル名で大文字と小文字が区別されることに注意してください。
特殊文字(アンダースコアなど)がファイル名に使用されている場合は、モバイル・デバイスの仕様を参照して、その文字の使用がサポートされているかどうかを確認する必要があります。
MAF AMXアプリケーション機能のナビゲーションを定義したら、次はページを作成したり、ナビゲーションを使用するコンポーネントを追加したりできます。ページでのナビゲーション・コンポーネントの使用方法の詳細は、「制御フローの定義方法」を参照してください。
MAF AMXアプリケーション機能のタスク・フローを定義すると、ビュー・ファイルをダブルクリックしてMAF AMXビューにアクセスできます。詳細は、「ビューの作成」を参照してください。
新しいバインド・タスク・フローが作成されると、MAFはpage-flowscope-behavior
要素をName-flow.xml
ファイルに追加します。要素をpush-newに設定すると、新しいページ・フロー・スコープが作成されますが、preserveに設定すると、タスク・フローが実行されたときにページ・フロー変数が保持されます。
新しいバインド・タスク・フローが作成されると、MAFは自動的にpage-flow-scope-behavior
要素を<Name>
-flow.xml
ファイルに追加します。この要素は、最上位のtask-flow-definition
要素の子として追加されます。
注意:
page-flow-scope-behavior
要素は、新規作成したタスク・フローが以前のバージョンのMAFを使用して構築されたプロジェクトに作成された場合でも、すべてのタスク・フローに追加されます。
page-flow-scope-behavior
要素の値はデフォルトでpush-new
に設定され、図に示すように、新しいタスク・フローの概要エディタとソース・エディタおよびtask-flow-definition
要素の「プロパティ」ウィンドウに表示されます。
「ページ・フロー・スコープの動作」がpush-new
に設定されている場合、新しいページ・フロー・スコープが作成され、古いpageFlowScope
の変数は保存されて、スタックにプッシュされます。これにより、タスク・フロー・・リターン実行時に、以前のページ・フロー・スコープをリストアできます。「ページ・フロー・スコープの動作」がpreserve
に設定されている場合、タスク・フロー・コールを実行してタスク・フローが開始されたときに、pageFlowScope
の変数はクリアされないので、新しいタスク・フローの変数には古い値が格納されます。
既存のタスク・フローにpage-flow-scope-behavior
要素が存在しない場合は、この要素をpush-new
またはpreserve
として定義する必要があります。
pageFlowScope
の詳細は、「マネージドBeanカテゴリについて」を参照してください。
タスクフローはアクティビティとコントロール・フロー・ケースを使用して、アクティビティ間の遷移を定義します。
タスク・フローは、アクティビティ、およびアクティビティ間の遷移を定義する制御フロー・ケースで構成されます。
MAFタスク・フロー・デザイナは表13-1に示すアクティビティをサポートしています。
表13-1 タスク・フロー・アクティビティ
アクティビティ | 説明 |
---|---|
表示 |
MAF AMXページを表示します。「ビュー・アクティビティの追加」を参照してください。 |
メソッド・コール |
メソッド(通常はマネージドBean上のメソッド)を起動します。メソッド・コール・アクティビティをMAF AMXアプリケーション機能の制御フローの任意の位置に配置して、制御フロー・ルールに基づいてロジックを起動できます。詳細は、「メソッド・コール・アクティビティの追加」を参照してください。 タスク・フローに含まれるメソッド・コールに渡すパラメータを指定することもできます。これらには、MAF AMXタスク・フロー内のメソッド・コール・アクションの標準パラメータが含まれます。デザイナを使用してメソッドを生成する場合、デザイナにより必要な引数およびタイプが追加されます。 実行時にタスク・フロー内のメソッド・コールのパラメータを定義し、メソッド・コール自体にパラメータを渡してこれを使用できます。「タスク・フロー・アクティビティの追加および使用方法」を参照してください。 |
ルーター |
式言語(EL)式を評価し、その式の値に基づいて結果を戻します。その後、このような結果を使用して、タスク・フローの他のアクティビティに制御をルーティングします。「ルーター・アクティビティの追加」を参照してください。 |
タスク・フロー・コール |
バインドなしタスク・フローまたはバインド・タスク・フローからバインド・タスク・フローをコールします。タスク・フロー・コール・アクティビティでは、同じMAF AMXアプリケーション機能内にあるバインド・タスク・フローをコールできますが、別のMAF AMXアプリケーション機能またはライブラリに追加された機能アーカイブ・ファイル(FAR) (「MAFアプリケーション・コンテンツの再使用」を参照)からバインド・タスク・フローをコールすることもできます。 タスク・フロー・コール・アクティビティは、タスク・フロー入力パラメータおよび戻り値をサポートします。 「タスク・フロー・コール・アクティビティの追加」を参照してください。 |
タスク・フロー・リターン |
アプリケーションの制御フロー内で、バインド・タスク・フローが完了してコール元に制御フローが戻される場所を識別します。タスク・フロー・リターンは、バインド・タスク・フロー内でのみ使用できます。「タスク・フロー・リターン・アクティビティの追加」を参照してください。 |
MAFタスク・フロー・デザイナは表13-2に示す制御フローをサポートしています。
表13-2 制御フロー
制御フロー | 説明 |
---|---|
制御フロー・ケース |
MAF AMXアプリケーション機能内で、あるアクティビティから次のアクティビティに制御を渡す方法を指定します。「制御フロー・ケースの定義」を参照してください。 |
ワイルドカード制御フロー・ルール |
IDがワイルドカード式と一致するアクティビティからの制御フロー・ケースを表します。「ワイルドカード制御フロー・ルールの追加」を参照してください。 |
エディタでViewController-task-flow.xml
ファイルを開いて、MAF AMXページ間の相互作用を設計します。
ViewController-task-flow.xml
ファイルを使用すると、「コンポーネント」ウィンドウからMAF AMXタスク・フロー・コンポーネントをダイアグラマにドラッグ・アンド・ドロップすることにより、ビュー(MAF AMXページ)間の相互作用を設計できます。
Products-flow.xml
というタスク・フロー・ファイル例を図に示します。このファイルでは、制御フローはproducts
ページからproductdetails
ページに方向付けられます。productdetails
ページからproducts
ページに戻るため、組込みの__back
ナビゲーションが使用されます(「「戻る」ナビゲーションのMAFサポートに関する必知事項」を参照)。
MAFタスク・フロー・ダイアグラムは、アクティビティとタスク・フローで機能を設計できるエディタです。
図13-6に示すように、MAFタスク・フロー作成ユーティリティを使用してタスク・フローを作成すると、タスク・フロー・ダイアグラムおよび「コンポーネント」ウィンドウが自動的に表示されます。タスク・フロー・ダイアグラムはビジュアル・エディタであり、「コンポーネント」ウィンドウまたは「アプリケーション」ウィンドウからのアクティビティとタスク・フローをここにドラッグ・アンド・ドロップできます。「タスク・フロー・アクティビティの追加および使用方法」を参照してください。
タスク内の手順に従って、開いているタスク・フロー・ソース・ファイルにタスク・フロー・アクティビティを追加します。アクティビティを使用可能なコンポーネントからダイアグラムにドラッグします。
始める前に:
図に示すように、「コンポーネント」ウィンドウから「MAFタスク・フロー」を選択する必要があります。
MAFタスク・フローにアクティビティを追加するには:
ViewController-task-flow.xml
など)をダブルクリックして、図に示すようなタスク・フロー・ダイアグラムおよび「コンポーネント」ウィンドウを表示します。ダイアグラマにはタスク・フロー・エディタが表示されます。「コンポーネント」ウィンドウには、MAFタスク・フローで使用できるコンポーネントが自動的に表示されます。注意:
各バインド・タスク・フローに関連付けられているデフォルトのアクティビティがあります。
ビュー・アクティビティは、MAF AMXページを表示するタスク・フロー・アクティビティです。タスク・フローのビュー・アクティビティは、あるアクティビティが実行中に、制御を別のアクティビティに渡すように構成できます。
タスク・フローのソース・ファイルにあるXMLメタデータでは、ビュー・アクティビティが物理MAF AMXページと関連付けられています。id
属性ではビュー・アクティビティが識別されます。
タスク・フローのビュー・アクティビティは、実行中に相互に制御を受け渡すように構成できます。たとえば、あるビュー・アクティビティ(ビュー・アクティビティA)から次のビュー・アクティビティ(ビュー・アクティビティB)に制御を渡すには、ビュー・アクティビティAと関連付けられたページ上にコマンド・コンポーネント(ボタンやリンクなど)を構成できます。これを行うには、コマンド・コンポーネントのAction属性を、起動するタスク・フロー・アクティビティ(ビュー・アクティビティBなど)に対応する制御フロー・ケースfrom-outcome
に設定します。ユーザーは実行時にコマンド・コンポーネントを起動することで、制御フロー・ケースを初期化します。UIコンポーネントのAction属性の定数値または動的値のいずれかを使用して、あるビュー・アクティビティから別のアクティビティに移動できます。
コンポーネントのAction属性の定数値は、常に同じ制御フロー・ケースをトリガーするアクション結果です。ユーザーがコンポーネントをクリックすると、制御フロー・ケースに指定されているアクティビティが実行されます。代替の制御フローはありません。
コンポーネントのAction属性の動的値は、マネージドBeanまたはメソッドにバインドされます。メソッド・バインディングにより返される値によって、次に起動する制御フロー・ケースが決定されます。たとえば、メソッドはページ上でユーザー入力を検証し、入力が有効な場合はある値を返し、入力が無効な場合は別の値を返します。これらの異なるアクション値はそれぞれ別個のナビゲーション・ケースをトリガーするため、アプリケーションが移動可能なターゲット・ページは2つのいずれかになります。
「UIコンポーネントを使用したアクション結果の指定方法」を参照してください。
また、ターゲット・ビュー・アクティビティに制御を渡す前に、値が必ずtrue
になるEL式を記述できます。タスク・フローにある制御フロー・ケースの<if>
子要素の値としてEL式を記述します。
次の2つの例は、表示アクティビティ間で制御を渡すときの処理を示しています。
この例は、バインド・タスク・フローまたはバインドなしタスク・フローのXMLソース・ファイルに定義された制御フロー・ケースを示しています。
<control-flow-rule> <from-activity-id>Start</from-activity-id> <control-flow-case> <from-outcome>toOffices</from-outcome> <to-activity-id>WesternOffices</to-activity-id> </control-flow-case> </control-flow-rule>
この例では、Startビュー・アクティビティに関連付けられているMAF AMXページ上のボタンで、action
属性としてtoOffices
が指定されます。ユーザーがボタンをクリックすると、制御フロー・メタデータでto-activity-id
として指定されたWesternOffices
アクティビティに制御フローが渡されます。
<amx:commandButton text="Go" id="b1" action="toOffices">
詳細は、次を参照してください。
前述のとおり、ビュー・アクティビティは、メタデータで、タスク・フローへの追加時に表示される実際のMAF AMXページに関連付けられています。ビュー・アクティビティを追加するには、「コンポーネント」ウィンドウからドラッグ・アンド・ドロップします。実際のMAF AMXページを作成するには、「ダイアグラム」ウィンドウでビュー・アクティビティをダブルクリックし、表示されるダイアログでページの特性を定義します。ビュー・アクティビティは、「アプリケーション」ウィンドウ内のMAF AMXファイルを概要エディタの「ダイアグラム」タブにドラッグ・アンド・ドロップして作成することもできます。
バインド・タスク・フローを作成する場合、特定のアクティビティをデフォルト・アクティビティに指定できます(「バインド・タスク・フローおよびバインドなしタスク・フローに関する必知事項」を参照)。それにより、バインド・タスク・フローの実行時は常にこの特定のアクティビティを最初に実行できます。デフォルトでは、JDeveloperはタスク・フローに追加した最初のアクティビティをデフォルトにします。別のアクティビティに変更する場合は、「ダイアグラム」ウィンドウ内で該当するアクティビティを右クリックし、「アクティビティのマーク」→「デフォルト・アクティビティ」の順に選択します。
ルーティング条件をEL式で表すことができる場合は、EL式の実行時の評価を使用するルーター・アクティビティを使用して、制御をアクティビティにルーティングします。プロパティを構成してルーター・ケースを追加できる式を作成できます。
各制御フローは、異なるルーター・ケースに対応できます。各ルーター・ケースでは、次の要素を使用して、制御が次にルーティングされるアクティビティを選択します。
expression
: 実行時の値がtrue
またはfalse
になるEL式
ルーター・アクティビティは、true
を返すEL式に対応する結果を返します。
outcome
: EL式の値がtrue
の場合にルーター・アクティビティから返される値
制御フロー・ケース上でルーター・ケースのoutcome
がfrom-outcome
と一致する場合は、制御フロー・ケースがポイントするアクティビティに制御が渡されます。ルーター・アクティビティのケースの値がtrue
でない場合、またはルーター・アクティビティのケースが指定されていない場合は、ルーターの「デフォルト結果」
フィールドで指定されているoutcomeが使用されます。
ルーティング条件をEL式で表すことができる場合は、ルーター・アクティビティの使用を検討してください(ルーター・アクティビティにより、タスク・フローの条件について、より詳しい情報を示すことができます)。
ルーター・アクティビティをダイアグラム上にドラッグすると、「プロパティ」ウィンドウを使用して式を作成し、その式の評価によりどの制御フロー・ルールに従うかを決定できます。「プロパティ」ウィンドウを使用して、ルーター・アクティビティの「アクティビティID」および「デフォルト結果」を構成し、ルーター・ケースをルーター・アクティビティに追加します。
「アクティビティID」属性を定義する際は、タスク・フローのソース・ファイル内にルーター・アクティビティを識別する値を記述します。
「デフォルト結果」属性を定義する際は、いずれの制御フロー・ケースの値もtrueに評価されない場合、または制御フロー・ケースが指定されていない場合に、ルーター・アクティビティが制御を渡すアクティビティを指定します。
図に示すように、追加するルーター・ケースごとに「ケース」セクションの「追加」( + )をクリックして値を指定します。
式: 実行時の値がtrue
またはfalse
になるEL式。
たとえば、ビュー・アクティビティの入力テキスト・フィールドにある値を参照するには、次のようなEL式を記述します。
#{pageFlowScope.value=='view2'}
EL式がtrue
を返す場合は、ルーター・アクティビティによって「結果」フィールドで指定した結果が呼び出されます。
結果: 「式」によって指定されたEL式がtrue
を返す場合にルーター・アクティビティが呼び出す結果。
タスク・フロー・ダイアグラムの結果ごとに制御フロー・ケースまたはワイルドカード制御フロー・ルールを作成します。たとえば、制御フロー・ケースの結果ごとに、対応するfrom-outcome
があることを確認します。
ルーター・アクティビティを使用して制御フローを構成すると、JDeveloperによって、ルーター・アクティビティのプロパティに指定した値に基づいて、値がタスク・フローのソース・ファイルに書き込まれます。
メソッド・コール・アクティビティはカスタム・メソッドまたは組込みメソッドをコールして、AMXアプリケーション機能のロジックを機能の制御フロー内から起動します。メソッド・コール・アクティビティを追加し、「プロパティ」ウィンドウを使用して、コールするメソッドを構成できます。
メソッド・コール・アクティビティを使用して、アプリケーション機能の制御フロー内のどこからでもMAF AMXアプリケーション機能ロジックを起動する、カスタム・メソッドまたは組込みメソッドをコールします。ページ表示前の初期化、ページ終了後のクリーンアップ、例外処理などのタスクを実行するメソッドを指定できます。
制御フロー・ケースを指定してメソッドの終了後に制御を渡すメソッドに対して結果を設定できます。結果は次のいずれかとして指定できます。
fixed-outcome
: 正常完了時に、メソッドから常に戻される単一の結果(例: success
)。メソッドが正常に完了しないと結果は戻されません。メソッド・タイプがvoidの場合、fixed-outcome
を指定する必要があり、to-string
を指定することはできません。
この結果を定義するには、図に示すように、「プロパティ」ウィンドウで「固定結果」フィールドを設定します。
to-string
: true
として指定されると、メソッドによって戻されたJavaオブジェクトに対してtoString
メソッドがコールされ、それに基づく結果が得られます。たとえば、toString
メソッドからeditBasicInfo
が戻された場合、ナビゲーションはeditBasicInfo
という名前の制御フロー・ケースに移動します。
この結果を定義するには、図に示すように、「プロパティ」ウィンドウでtoString()フィールドを設定します。
メソッド・コール・アクティビティは、「データ・コントロール」ウィンドウからタスク・フロー・ダイアグラム内のメソッド・コール・アクティビティにデータ・コントロール操作を直接ドロップして、既存のメソッドに関連付けることができます。また、メソッドおよび操作をタスク・フロー・ダイアグラムに直接ドラッグすることもでき、その場合、新しいメソッド・コール・アクティビティが自動的に作成されます。メソッドにEL式およびその他のオプションを指定できます。
メソッド・コールを構成する場合、デフォルト値を変更するには、そのアクティビティの識別子を「アクティビティID」フィールドで変更します。新規の値を入力すると、ダイアグラムのメソッド・コール・アクティビティの下に新しい値が表示されます。
「メソッド」フィールドには、コールするメソッドを識別するEL式を入力します。
注意:
EL式内のバインディング変数は現在のバインディング・コンテナからバインディングを参照します。バインディング変数を指定するには、バインディング・コンテナ定義またはページ定義を指定する必要があります。「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照してください。
また、式ビルダーを使用してメソッドのEL式を作成することもできます。
プロパティ・エディタから「メソッド」フィールドに「メソッド式ビルダー」を選択します。
「式ビルダー」ダイアログで、起動するメソッドにナビゲートして選択します。
メソッド・コール・アクティビティでマネージドBeanメソッドを起動する場合は、ダイアログでメソッド・コール・アクティビティをダブルクリックします。これによってダイアログが呼び出され、そこで起動するマネージドBeanメソッドを指定できます。
メソッドのパラメータおよび戻り値を指定するには、図に示すように、「プロパティ」ウィンドウの「パラメータ」セクションを使用します。メソッド・コール・アクティビティを既存のメソッドに関連付けることによってパラメータをまだ作成していない場合は、「追加」(+)をクリックして次のように設定することにより、パラメータを追加します。
クラス: パラメータ・クラスを入力します。たとえば、java.lang.Double
のように指定します。
値: パラメータの値を取得するEL式を入力します。次にその例を示します。
#{pageFlowScope.shoppingCart.totalPurchasePrice}
戻り値: メソッドの戻り値を格納する場所を特定するEL式を入力します。次にその例を示します。
#{pageFlowScope.Return}
タスク・フロー・コール・アクティビティは、バインド・タスク・フローまたはバインドなしタスク・フローのいずれかから、バインド・タスク・フローをコールします。タスク内の手順に従って、バインド・タスク・フローをコールし、タスク・フロー・コール・アクティビティに入力パラメータの値を指定します。
タスク・フロー・コール・アクティビティを使用すると、バインドなしタスク・フロー(「バインドなしタスク・フロー」を参照)またはバインド・タスク・フロー(「バインド・タスク・フロー」を参照)のいずれかからバインド・タスク・フローをコールできます。このアクティビティによって、同じまたは別のMAF AMXアプリケーション機能内にあるバインド・タスク・フローをコールできます。
コールされたバインド・タスク・フローでは、デフォルト・アクティビティが最初に実行されます。バインド・タスク・フロー・コールの数に制限はありません。たとえば、コール先のバインド・タスク・フローからは別のバインド・タスク・フローをコールでき、さらにそのバインド・タスク・フローからも次々にコールできるため、各タスク・フローがタスク間を結び付けるタスク・フロー・チェーンを作成できます。
バインド・タスク・フローにパラメータを渡すには、タスク・フロー・コール・アクティビティに入力パラメータの値を指定する必要があります。これらの値は、コール先のバインド・タスク・フローの入力パラメータ定義と一致している必要があります。「タスク・フロー・コール・アクティビティでの入力パラメータの指定」を参照してください。
注意:
タスク・フロー・コール・アクティビティの入力パラメータの値は、コール元のタスク・フロー内で値が取得される場所を指定します。
コール先のタスク・フローの入力パラメータの定義の値は、それが渡されたときにコール先のバインド・タスク・フローで値が格納される場所を指定します。
注意:
バインド・タスク・フローがタスク・フロー・コール・アクティビティに関連付けられると、バインド・タスク・フローで設定されている入力パラメータ定義に基づいて、入力パラメータが自動的にタスク・フロー・コール・アクティビティに挿入されます。したがって、実行する必要があるのは、タスク・フロー・コール・アクティビティの入力パラメータへの値の割当てのみです。
デフォルトでは、すべてのオブジェクトは参照渡しされます。プリミティブ型(int
、long
、boolean
など)は常に値で渡されます。
バインド・タスク・フローからコール元に戻り値が渡される方法は、入力パラメータが渡される方法と類似しています。詳細は、「バインド・タスク・フローの戻り値の構成」を参照してください。
タスク・フロー・コール・アクティビティを使用するには:
タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールします(「タスク・フロー・コール・アクティビティを使用したバインド・タスク・フローのコール」を参照)
バインド・タスク・フローにパラメータを渡す場合は、タスク・フロー・コール・アクティビティへの入力パラメータを指定します(「タスク・フロー・コール・アクティビティでの入力パラメータの指定」を参照)。
タスク内の手順に従って、バインド・タスク・フローのソース・ファイルを開いてアクティビティを選択し、タスク・フロー・コール・アクティビティを追加して、その識別子を構成します。
バインド・タスク・フローをコールする手順:
ダイアグラム・ビューでバインド・タスク・フロー・ファイルを開きます。
「コンポーネント」ウィンドウで、「コンポーネント」→「アクティビティ」を選択します。
タスク・フロー・コール・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。
次のオプションのいずれかを選択して、コール先タスク・フローを識別します。
新しくドロップしたタスク・フロー・コール・アクティビティをダブルクリックして、新しいバインド・タスク・フローの設定を定義できる「MAFタスク・フローの作成」ダイアログを開きます(図13-2を参照)。
「アプリケーション」ウィンドウから既存のバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップします。
起動するバインド・タスク・フローの名前がわかっている場合は、次の手順を実行します。
ダイアグラム・ビューで、「タスク・フロー・コール」アクティビティを選択します。
次の図に示す「プロパティ」ウィンドウで、「一般」セクションを開き、「タスク・フロー参照」リストで「静的」を選択します。
「ドキュメント」フィールドに、コールするバインド・タスク・フローのソース・ファイル名を入力します。
「ID」フィールドには、コール先のバインド・タスク・フローのXMLソース・ファイルに含まれているバインド・タスク・フローIDを入力します。
起動するバインド・タスク・フローの名前がわからない場合や、実行時のユーザーによって名前が異なる場合は、次の手順を実行します。
ダイアグラム・ビューで、「タスク・フロー・コール」アクティビティを選択します。
「プロパティ」ウィンドウで、「一般」セクションを開き、「タスク・フロー参照」リストで「動的」を選択します。
式ビルダーを使用して、「動的タスク・フロー参照」プロパティ・フィールドの値を設定します(実行時に起動するバインド・タスク・フローのIDを識別するEL式を記述します)。
新しい入力パラメータは、選択したタスク・フロー・コール・アクティビティに指定できます。タスク内の手順に従って、コールされたバインド・タスク・フローの入力パラメータ定義を構成し、タスク・フロー・コール・アクティビティと、そのコールされたバインド・タスク・フローの間のパラメータをマップします。
タスク・フロー・コール・アクティビティとそのコール先のバインド・タスク・フローの間でパラメータをマップするには、まずコール先のバインド・タスク・フローの入力パラメータ定義を指定する方法をお薦めします。その後、「アプリケーション」ウィンドウからバインド・タスク・フローをドラッグし、タスク・フロー・コール・アクティビティにドロップできます。タスク・フロー・コール・アクティビティの入力パラメータは、バインド・タスク・フローの入力パラメータの定義に基づいて、自動的に作成されます。「バインド・タスク・フローへのパラメータ渡し」を参照してください。
当然ながら、最初にタスク・フロー・コール・アクティビティに入力パラメータを指定することも可能です。最初に定義した場合にも、コール先のバインド・タスク・フローの入力パラメータ定義がタスク・フロー・コール・アクティビティに関連付けられた時点で、その入力パラメータ定義に基づいて自動的に置換されます。
コール先のバインド・タスク・フローをまだ作成していない場合にも、タスク・フロー・コール・アクティビティに入力パラメータを指定する方法は便利です。この時点で指定することで、バインド・タスク・フローのコール時にタスク・フロー・コール・アクティビティが最終的にマップされる予定の入力パラメータを特定できます。
入力パラメータを指定する手順:
ダイアグラム・ビューでタスク・フロー・ファイルを開き、「タスク・フロー・コール」アクティビティを選択します。
「プロパティ」ウィンドウで、「パラメータ」セクションを開き、「追加」( + )をクリックして、「入力パラメータ」リストで次のように新しい入力パラメータを指定します。
名前: 入力パラメータを識別する名前を入力します。
値: パラメータ値を識別するEL式を入力します。このEL式では、コール元のタスク・フロー内でパラメータ値が取得される場所を指定します。たとえば、次のようにEL式を入力します。
#{pageFlowScope.callingTaskflowParm}
デフォルトでは、すべてのオブジェクトは参照渡しされます。プリミティブ型(int
、long
、boolean
など)は常に値で渡されます。
入力パラメータを指定すると、対応する入力パラメータ定義をコール先のバインド・タスク・フローに指定できます。「バインド・タスク・フローへのパラメータ渡し」を参照してください。
共有されるデータ・コントロール・コンテキストを使用すると、タスク・フロー・コールでデータ・コントロールを共有できますが、独立したデータ・コントロール・コンテキストを使用すると、タスク・フローは独立して動作できます。タスク内の手順に従って、選択したタスク・フロー・コール・アクティビティのタスク・フローに、データ・コントロール・コンテキスト・プロパティを指定します。
タスク・フローがデータ・コントロールを共有するか、独立したデータ・コントロールを保存するために使用する内部オブジェクトは、データ・コントロール・コンテキストと呼ばれます。タスク・フローのdata-control-context
の値にshared
が指定されている場合は、コール先のタスク・フローでは独自のデータ・コントロール・コンテキストは作成されず、コール元のデータ・コントロール・コンテキストが使用されます。これにより、データ・コントロール・コンテキストに添付されたデータ・コントロール・インスタンスをコール先のタスク・フローと共有できるようになります。または、コール先のタスク・フローでdata-control-context
の値にisolated
が指定されている場合は、新しいデータ・コントロール・コンテキストが作成され、タスク・フローで使用されるすべてのデータ・コントロールの新しいインスタンスが、新規に作成されたデータ・コントロール・コンテキストに添付されます。
タスク・フロー・コール・アクティビティのデータ・コントロール・コンテキストは、次のように定義できます。
ダイアグラム・ビューで、「タスク・フロー・コール」アクティビティを選択します。
「プロパティ」ウィンドウで「一般」セクションを開き、「データ・コントロール・コンテキスト」プロパティの値を指定します。
コール元のタスク・フローでデータ・コントロールを共有する場合は、ドロップダウン・フィールドからshared
(デフォルト)を選択します。たとえば、コール先のタスク・フローに加えられた変更は、コール元のタスク・フローに戻るナビゲーションが発生したときに反映されます。
そのタスク・フローで独自のデータ・コントロール・インスタンスのセットを持つ場合は、ドロップダウン・フィールドからisolated
を選択します。
"shared"
または"isolated"
のいずれかに評価されるEL式を定義します。「プロパティ」ウィンドウの「データ・コントロール・コンテキスト」フィールドの右側にある「プロパティ・メニュー」アイコンをクリックして開くことができる「プロパティの編集: データ・コントロール・コンテキスト」ダイアログ・ボックスで、この値を設定します(次の図を参照)。
注意:
data-control-context
の正しい値を選択するには、自身のデータ・モデルを検討し、タスク・フローの境界を越えてどのようにデータを共有する必要があるかを決定します。データ・コントロール・コンテキストの深さの設定の詳細は、「タスク・フローのデータ・コントロール・コンテキストの深さを定義する方法」を参照してください。
タスク・フロー・リターン・アクティビティは、MAF AMXアプリケーション機能の制御フロー内で、バインド・タスク・フローが完了してコール元に制御フローが戻される場所を識別します。タスク・フロー・リターン・アクティビティは、バインド・タスク・フロー内でのみ使用できます。
タスク・フロー・リターン・アクティビティ・アイコンを囲むグレーの円は、そのアクティビティがバインド・タスク・フローの終了ポイントであることを示します。各バインド・タスク・フローには、ゼロから複数のタスク・フロー・リターン・アクティビティを指定できます。
各タスク・フロー・リターン・アクティビティには、コール元のタスク・フローに戻されるoutcome
を指定します。
起動するタスク・フローに戻されるoutcome
は、エンド・ユーザー・アクションによって異なります。起動元のタスク・フローによって次のアクションを決定するように、起動元のタスク・フローの制御フロー・ケースを構成できます。制御フロー・ケースの「結果(自)」プロパティをタスク・フロー・リターン・アクティビティのoutcome
からの戻り値に設定し、結果に基づくアクションを起動します。これにより、コール先タスク・フローからの戻り値に基づいて制御フローが決まります。
タスク・フロー・リターン・アクティビティを追加する手順:
ダイアグラム・ビューでバインド・タスク・フロー・ファイルを開きます。
「コンポーネント」ウィンドウで、「コンポーネント」→「アクティビティ」を選択します。
タスク・フロー・リターン・アクティビティをダイアグラムにドラッグ・アンド・ドロップします。
図に示すように、「プロパティ」ウィンドウで「一般」セクションを開き、「名前」フィールドに結果を入力します。
タスク・フロー・リターン・アクティビティは、現在のバインド・タスク・フローが存在する場合に、この結果をコール元タスク・フローに返します。タスク・フロー・リターン・アクティビティごとに1つのみ結果を指定できます。コール元のタスク・フローには、戻された時点の制御フローを処理する制御フロー・ルールを定義する必要があります。詳細は、「制御フローの定義方法」を参照してください。
「動作」セクションを開き、「再入力」リストでいずれかのオプションを選択します。
バインド・タスク・フローにreentry-not-allowedを指定しても、エンド・ユーザーはモバイル・デバイスの「戻る」ボタンをクリックするとバインド・タスク・フロー内のページに戻れます。ただし、エンド・ユーザーがそのページでボタンの作動などなんらかの操作を行うと、バインド・タスク・フローを不正に再開したことを示す例外(InvalidTaskFlowReentry
など)がスローされます。
「トランザクションの終了」ドロップダウン・リストから、次のいずれかのオプションを選択します。
commit: 選択すると、既存のトランザクションをデータベースにコミットします。
rollback: 選択したトランザクションをコール先のタスク・フローの以前のエントリまでロールバックします。これを指定すると、新しいトランザクションはバインド・タスク・フローに入って開始された当初の状態までロールバックされるため、トランザクションを取り消すのと同じ効果があります。
commitとrollbackのいずれも指定しないと、トランザクションはコール元のバインド・タスク・フローによって閉じられるまで開いたままになります。
ページ定義ファイルは、実行時にデータを移入するバインディング・オブジェクトを定義します。通常、MAF AMXアプリケーション機能で、ページUIコンポーネントをデータ・コントロールにバインドするために使用されます。次のタスク・フロー・アクティビティでも、ページ定義ファイルを使用してデータ・コントロールへのバインドが可能です。
メソッド・コール: 「データ・コントロール」ウィンドウからタスク・フローにデータ・コントロール操作をドラッグ・アンド・ドロップして、メソッド・コール・アクティビティを作成するか、既存のメソッド・コール・アクティビティにドロップできます。いずれの場合も、メソッド・コール・アクティビティが、データ・コントロール操作にバインドされます。
ルーター: ページ定義ファイルをルーター・アクティビティと関連付けることで、バインディング・コンテナが作成されます。このバインド・コンテナは実行時にルーター・アクティビティ・ケースのEL式を評価し、ルーター・アクティビティが正しいバインド値を参照していることを確認します。各ルーター・アクティビティ・ケースは、EL式の評価結果がtrue
の場合に返される結果を指定します。そのため、ページ定義ファイルには、true
またはfalse
の評価結果となるデータ・コントロール操作だけを追加します。
タスク・フロー・コール: タスク・フロー・コール・アクティビティにページ定義ファイルを関連付けることで、バインド・コンテナが作成されます。実行時にタスク・フロー・コール・アクティビティから入力パラメータが渡されると、バインド・コンテナが起動します。バインド・コンテナはタスク・コール元のタスク・フローからコール先のタスク・フローに入力パラメータが渡される際に、フロー・コール・アクティビティがバインド値を参照する場合は、正しい値を参照していることを確認します。
ビュー: ビュー・アクティビティをページ定義ファイルに直接関連付けることはできません。かわりに、ビュー・アクティビティが参照するページを関連付けます。
タスク・フローの「ダイアグラム」ウィンドウで、前述のタスク・フロー・アクティビティ(ビュー・アクティビティを除く)のいずれかを右クリックすると、ページ定義ファイルが存在しない場合にページ定義ファイルを作成できるオプションがポップアップ・メニューに表示されます。ページ定義ファイルが存在する場合、JDeveloperではページ定義ファイルに移動するためのすべてのタスク・フロー・アクティビティのポップアップ・メニュー・オプションが表示されます(「ページ定義ファイルへのアクセス」を参照)。また、ページ定義ファイルに関連付けられたメソッド・コール・アクティビティを右クリックすると、JDeveloperで「バインディングの編集」ポップアップ・メニュー・オプションが表示されます。
ページ定義ファイルに関連付けられたタスク・フロー・アクティビティでは、タスク・フロー・アクティビティ・アイコンの右下にアイコンが表示されます。
タスク・フロー・アクティビティにページ定義ファイルを関連付けるには:
ダイアグラム・ビューで、ページ定義ファイルを作成するタスク・フロー・アクティビティを右クリックし、ポップアップ・メニューから「ページ定義の作成」を選択します。
作成されたページ定義ファイルに、タスク・フロー・アクティビティの実行時に参照させたいバインドを追加します。
ページ定義ファイルの詳細は、「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照してください。
前述の手順を完了すると、デザインタイムに、タスク・フロー・アクティビティのページ定義ファイルがJDeveloperによって生成されます。ページ定義ファイルのファイル名は、元のタスク・フローおよびタスク・フロー・アクティビティまたは起動するデータ・コントロール操作から構成されます。JDeveloperは作成されたページ定義ファイル内で、タスク・フロー・アクティビティからバインドへのEL式も生成します。実行時にバインド・コンテナは、タスク・フロー・アクティビティのEL式が正しい値を参照していることを確認します。
データ・コントロール・コンテキストの深さを構成して特定の機能を無効にすることで、タスク・フローの無限ドリルを回避できます。たとえば、データ・コントロール・コンテキストが特定のスタックの深さに到達したら、ネストされたタスク・フローへのドリルを無効にできます。
次の図に示すように、アプリケーションのmaf-config.xml
ファイル内のmaximumDataControlContextDepth
プロパティの設定によって、データ・コントロール・コンテキストの最大の深さを変更できます(「データ・コントロール・コンテキストの指定」を参照)。デフォルト値は、10
です。
また、次の図に示すように、モバイル・アプリケーション・フレームワークのfeature
オブジェクトを使用して、#{feature.dataControlContextDepth}
または#{feature.maximumDataControlContextDepth}
のいずれかのEL式を定義することもできます。
さらに、スタックの最大の深さへのアクセスに加え、データ・コントロール・コンテキストの現在のスタックの深さへのアクセスを提供するEmbeddedFeatureContext
クラスのメソッドを使用できます。Oracle Mobile Application Framework Java APIリファレンスを参照してください。
maf-config.xml
ファイルの詳細は、表C-1を参照してください。
EL式の詳細は、「EL式の作成」を参照してください。
MAF AMXアプリケーション機能で制御フローを定義するには、次のタスク・フロー・コンポーネントを使用します。
制御フロー・ケース(「制御フロー・ケースの定義」を参照)
ワイルドカード制御フロー・ルール(「ワイルドカード制御フロー・ルールの追加」を参照)
制御がアクティビティから次のアクティビティに渡される方法を指定する制御フロー・ケース・コンポーネントを使用してナビゲーションを作成できます。制御フローを作成するには、「コンポーネント」ウィンドウから「制御フロー・ケース」を選択します。次に、制御フロー・ケースをソース・アクティビティに接続し、さらにターゲット・アクティビティに接続します。
ソースおよびターゲット・アクティビティを接続すると、JDeveloperでは、次のものが作成されます。
control-flow-rule
: from-activity-id
を使用してソース・アクティビティを識別します。
control-flow-case
: to-activity-id
を使用してターゲット・アクティビティを識別します。
MAFタスク・フロー・ダイアグラムで制御フロー・ケースを直接定義するには:
from-outcome
には、MAF AMXのUIコンポーネントのaction属性に指定された値と照合される値が含まれています。from-outcome
を変更するには、ダイアグラムの制御フローの隣のテキストを選択します。デフォルトでは、これはワイルドカード文字です。from-activity-id
(ソース・アクティビティの識別子)やto-activity-id
(ターゲット・アクティビティの識別子)を変更するには、ダイアグラムの矢印のどちらかの端を新規のアクティビティにドラッグします。MAFタスク・フローではワイルドカード制御フロー・ルールをサポートし、これは、後方ワイルドカード(foo*
)や単一ワイルドカード文字のある制御フローfrom-activity-id
を表します。ワイルドカード制御フロー・ルールは、「コンポーネント」ウィンドウからドラッグ・アンド・ドロップすることにより、バインドなしタスク・フローまたはバインド・タスク・フローに追加できます。ワイルドカード制御フロー・ルールを構成するには、「プロパティ」ウィンドウを使用します。
ワイルドカード制御フロー・ルールを追加するには:
次の例は、タスク・フロー・ソース・ファイルの制御フロー・ルール要素の一般的な構文を示しています。
<control-flow-rule> <from-activity-id>from-view-activity</from-activity-id> <control-flow-case> <from-action>actionmethod</from-action> <from-outcome>outcome</from-outcome> <to-activity-id>destinationActivity</to-activity-id> <if>#{myBean.someCondition}</if> </control-flow-case> <control-flow-case> ... </control_flow-case> </control-flow-rule>
制御フロー・ルールは、次のメタデータで構成されます。
control-flow-rule
: 制御フロー・ケース要素の必須ラッパー要素。
from-activity-id
: 制御フロー・ルールの発生元となるアクティビティの識別子(source
など)。
from-activity-id
の後方ワイルドカード( * )文字がサポートされています。ルールは、ワイルドカードのパターンに一致するすべてのアクティビティに適用されます。たとえば、login*
は、リテラルlogin
で始まるすべての論理アクティビティID名と一致します。メタデータに(後方ワイルドカードではなく)単一のワイルドカード文字を指定すると、ダイアグラムで、制御フローが自動的にワイルドカード制御フロー・ルール・アクティビティに変換されます。「ワイルドカード制御フロー・ルールの追加」を参照してください。
control-flow-case
: 制御フロー・ルールの各ケースの必須ラッパー要素。それぞれのケースで、同じソース・アクティビティに対して異なる制御フローを定義します。制御フロー・ルールには、少なくとも1つの制御フロー・ケースが必要です。
from-action
: 指定されたアクション・メソッドからの結果のみにルールの適用を制限する任意の要素。アクション・メソッドは、ELバインディング式(#{backing_bean.cancelButton_action}
など)として指定されます。
前の例では、結果がactionmethod
から戻された場合にのみ制御がdestinationActivity
に渡されます。
from-action
の値は、ビュー・アクティビティから発生する制御フローのみに適用され、その他のアクティビティ・タイプからのものには適用されません。from-action
では、ワイルドカードはサポートされていません。
from-outcome
: 特定の元のアクティビティ結果に基づき、続いて起こる制御フロー・ケースを識別する要素。考えられるすべての元のアクティビティの結果は、制御フロー・ケースと適合する必要があります。
from-action
要素とfrom-outcome
要素の両方を空のままにすると、ケースはアクティビティに対して定義されたその他の制御フロー・ケースでは識別されないすべての結果に適用されるため、アクティビティのデフォルト・ケースが作成されます。from-outcome
では、ワイルドカードはサポートされていません。
to-activity-id
: 制御フロー・ケースが実行される場合にナビゲーションのルーティング先となるアクティビティの完全な識別子が含まれる必須要素。各制御フロー・ケースは、異なるto-activity-id
を指定できます。
if
: EL式の値を受け取るオプション要素です。実行時にEL式の値がtrue
の場合は、to-activity-id
要素によって識別されたアクティビティに制御フローを渡します。
図に示すタスク・フロー例では、アクション結果の値に基づいて、viewA→viewB→viewD、またはviewA→viewC→viewDという2つの別のパスを経由してviewDに到達する可能性があります(「UIコンポーネントを使用したアクション結果の指定方法」を参照)。
理論上は、どのナビゲーション・パスが使用されたかを追跡して__back
ナビゲーション・フローを直接実装することもできますが、特にモバイル・デバイスの画面領域が限られていてナビゲーション・シーケンスに従っていない遷移が非常に頻繁に発生するため、これは複雑なうえに間違いが発生しやすくなります。MAFでは、組込みの__back
ナビゲーションがサポートされているため、タスク・フロー全体にわたる後方移動が可能です。つまり、経由したパスに関する情報を適用することにより、同じパスを経由する後方ナビゲーションを実行します。たとえば、最初のナビゲーションでviewAからviewCを経由してviewDに達していた場合、ViewDで__back
オプションを実行すると、エンド・ユーザーは、ViewB経由ではなくViewC経由で、ViewAに自動的に戻ります。
詳細は、次を参照してください:
ナビゲーションのドラッグ動作を使用することで、いずれかのMAF AMXページから別のページへのナビゲーションを有効化できます。「ドラッグ・ナビゲーションの有効化」を参照してください。
「プロパティ」ウィンドウを使用して、次に示すUIコンポーネントのいずれかのaction
属性を該当する制御フロー・ケースfrom-outcome
に設定して次のタスク・フロー・アクティビティに導くことにより、アクション結果を指定できます。
コマンド・ボタン(「ボタンの使用方法」を参照)
コマンド・リンク(「リンクの使用方法」を参照)
リスト・アイテム
図に示すように、UIコンポーネントの「アクション」フィールドを使用して、特定のMAF AMXページの1つ以上のタスク・フローで定義される可能性のあるアクション結果のリストから選択を行います。
戻るアクション(__back
)は、各リストに自動的に追加され、前に参照したページへのナビゲーションを可能にします。
注意:
MAF AMXページは、バインド・タスク・フローとバインドなしタスク・フローの両方で参照でき、その場合、両方のタスク・フローからのアクション結果が「アクション」選択リストに含まれます。
独自のMAFアプリケーションでマネージドBeanを作成および使用して、追加データを格納したり、カスタム・コードを実行できます。JDeveloperの通常の編集メカニズムを使用して、マネージドBeanを参照したり、適用可能なフィールドに対してマネージドBeanへの参照を作成できます。「マネージドBeanの作成および使用」を参照してください。
「プロパティ」ウィンドウのaction
プロパティに対する「編集」オプションを図に示します。このオプションをクリックすると、次の図に示す「プロパティの編集」ダイアログが表示されます。
「プロパティ」ウィンドウで「編集」オプションを選択できるMAF AMX属性を表にリストします。
表13-3 編集可能な属性
プロパティ | 要素 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
その他のどのプロパティに対しても「編集」をクリックすると同様のダイアログが表示されますが、次の図に示すように、「アクション結果」オプションはありません。
このダイアログは、マネージドBeanを作成するか、actionプロパティに使用可能なアクション結果を選択できることを示しています。
図13-16に示す「アクション結果」リストには、特定のMAF AMXページが属するすべてのタスク・フローからのアクション結果が含まれています。また、このリストには、以前に参照したページに戻るための__back
ナビゲーションの結果が含まれています(詳細は「UIコンポーネントを使用したアクション結果の指定方法」を参照してください)。ページがタスク・フローの一部ではない場合、__back
が「アクション結果」リストで使用可能な唯一の結果です。使用可能なアクション結果のいずれかを選択し、「OK」をクリックすると、アクション・プロパティ値は、適切なEL式(commandButton
の場合、次のとおり)で更新されます。
<amx:commandButton action="goHome"/>
「メソッド・バインディング」オプション(図13-16を参照)では、新しいマネージドBeanクラスを作成したり、既存のマネージドBeanクラスを選択することができます。
新しいマネージドBeanクラスを作成するには:
「マネージドBean」フィールドの横にある「新規」をクリックし、次の図に示す「マネージドBeanの作成」ダイアログを開きます。
MAFでは、次のスコープがサポートされています。
application
view
pageFlow
MAFアプリケーションまたはMAF AMXアプリケーション機能に対してマネージドBeanを宣言すると、マネージドBeanはインスタンス化されて適切なスコープ内で識別され、Beanのプロパティが解決されてそのメソッドがELを介してコールされます。「EL式の作成」を参照してください。
マネージドBeanおよびクラス名を指定し、「OK」をクリックします。
次の例は、新規に作成されたマネージドBeanクラスを示しています。MAF AMXページが含まれるタスク・フローが、Beanを参照するように更新されます。
<managed-bean id="__3"> <managed-bean-name>MyBean</managed-bean-name> <managed-bean-class>mobile.MyBean</managed-bean-class> <managed-bean-scope>application</managed-bean-scope> </managed-bean>
注意:
特定のMAF AMXページがバインド・タスク・フローおよびバインドなしタスク・フローの一部である場合、これら両方のタスク・フローがマネージドBeanエントリで更新されます。
「メソッド」フィールドの横にある「新規」をクリックして(図13-16および図13-17を参照)、図13-20に示す「メソッドの作成」ダイアログを開きます。
このダイアログを使用して、マネージドBeanメソッド名を指定します。
完了すると、選択したプロパティ値が適切なEL式で更新されます(commandButton
の場合は次のようになります)。
<amx:commandButton action="#{MyBean.getMeHome}"/>
また、マネージドBeanクラスは、次の例に示すように、新規に作成されたメソッドを含むように更新されます。
package mobile; public class MyBean { public MyBean() { } public String getMeHome() { // Add event code here... return null; } }
既存のマネージドBeanを選択するには:
図13-22に示す「マネージドBean」リストから選択を行います。
アクション結果と同様、「マネージドBean」リストには、このMAF AMXページが含まれるすべてのタスク・フローからのマネージドBeanが移入されます。
注意:
MAF AMXページがタスク・フローの一部ではない場合でも、マネージドBeanは作成できます。
詳細は、次の項を参照してください。
APIDemo (開発コンピュータ上のjdev_install
/jdeveloper/jdev/extensions/oracle.maf/Samples
ディレクトリ内のPublicSamples.zip
ファイルに配置されているMAFサンプル・アプリケーション)。
タスク・フローでページ遷移スタイルを定義することにより、ビューから別のビューへのMAF AMXページの遷移方法を指定できます。MAF AMXページの遷移動作は次のようにできます。
フェード・イン
左からスライド・イン
右からスライド・イン
下からスライド・アップ
上からスライド・ダウン
始点からスライド・イン
終点からスライド・イン
下からフリップ・アップ
上からフリップ・ダウン
左からフリップ
右からフリップ
始点からフリップ
終点からフリップ
なし
始点および終点からスライド・インと、始点および終点からフリップは、iOSプラットフォームおよびAndroid 4.2以降のプラットフォームで右から左(RTL)のテキスト方向に対応するために使用されます。通常は、左と右ではなく、始点と終点の遷移スタイルを使用することをお薦めします。
次の例のようにcontrol-flow-case
(制御フロー・ケース・コンポーネント)のtransition
属性を変更することによって、遷移スタイルを設定します。
<control-flow-rule id="__1"> <from-activity-id>products</from-activity-id> <control-flow-case id="__2"> <from-outcome>details</from-outcome> <to-activity-id>productdetails</to-activity-id> <transition>fade</transition> </control-flow-case> </control-flow-rule>
図13-23に示すように、「プロパティ」ウィンドウでは、transition
属性は「動作」の下にあります。デフォルトの遷移スタイルはslideLeft
です。
ヒント:
タスク・フローを定義する場合、control-flow-case
のtransition
値が論理的になるように指定する必要があります。たとえば、戻るナビゲーションのために左から右に遷移が発生する場合、右にスライドして前のページに戻る必要があります。
タスク・フローでは、MAF AMXアプリケーション機能内で制御フローを定義するためのモジュールのアプローチが提供されています。アプリケーション機能は単一の大規模なページ・フローとして表すのではなく、再利用可能な一連のタスク・フローに分割できます。各タスク・フローには、アプリケーション機能のナビゲーション・グラフの一部が含まれます。タスク・フロー内のノードは、アクティビティを表します。アクティビティ・ノードでは、ページの表示、アプリケーション・ロジックの実行または別のタスク・フローのコールなど、シンプルな論理的操作が表示されます。アクティビティ間の遷移は制御フロー・ケースと呼ばれます。
MAF AMXのタスク・フローには、バインドとバインドなしの2種類があります。
バインドなしタスク・フロー: エンド・ユーザーがタスクを完了できるように対話する一連のアクティビティ、制御フロー・ルールおよびマネージドBeanです。バインドなしタスク・フローは、バインド・タスク・フローに含まれていない、MAF AMXアプリケーション機能内のすべてのアクティビティおよび制御フローで構成されています。
バインド・タスク・フロー: タスク・フローの特殊な形式であり、バインドなしタスク・フローとは異なり、単一エントリ・ポイントと0以上の終了ポイントがあります。これには、アクティビティと制御フロー・ルールの独自のコレクションに加え、独自のメモリー・スコープとマネージドBean存続期間が含まれます。
バインドなしタスク・フローまたはバインド・タスク・フローに追加可能なアクティビティ・タイプの説明は、「タスク・フロー・アクティビティおよび制御フローに関する必知事項」を参照してください。
一般的なMAF AMXアプリケーション機能には、アプリケーション機能作成時に作成された1つのバインドなしタスク・フローと、1つ以上のバインド・タスク・フローの組合せが含まれます。実行時、MAFアプリケーションでは、バインドなしタスク・フローに追加したアクティビティからバインド・タスク・フローをコールできます。
各MAF AMXアプリケーション機能には必ず、そのアプリケーション機能に対する1つ以上のエントリ・ポイントを提供するバインドなしタスク・フローが1つ含まれています。エントリ・ポイントは、ビュー・アクティビティによって表されます。デフォルトでは、バインドなしタスク・フローのソース・ファイルはadfc-mobile-config.xml
ファイルです。
MAF AMXアプリケーション機能からのバインドなしタスク・フローのダイアグラムを図に示します。このタスク・フローにはいくつかのビュー・アクティビティが含まれており、いずれもアプリケーション機能へのエントリ・ポイントになっています。
次の場合、バインドなしタスク・フローを使用することを検討してください。
タスク・フローを別のタスク・フローからコールする必要がない。
MAF AMXアプリケーション機能に複数のエントリ・ポイントがある。
タスク・フローで最初に実行するアクティビティ(デフォルト・アクティビティ)を特に指定する必要がない。
バインドなしタスク・フローは、バインド・タスク・フローをコールできますが、別のタスク・フローからコールできません。
デフォルトでは、バインド・タスク・フローのソース・ファイルのファイル名はIDEによって提案されます(「タスク・フローの作成方法」を参照)。実行するタスクの目的を表すようにこのファイル名を変更できます。
バインド・タスク・フローからは別のバインド・タスク・フローをコールでき、さらにそのバインド・タスク・フローからも次々にコールできます。コールに深さ制限はありません。
MAF AMXアプリケーション機能からのバインド・タスク・フローのダイアグラムを図に示します。
バインド・タスク・フローを作成する理由は次のとおりです。
バインド・タスク・フローでは、常にバインド・タスク・フローの開始直後に実行する必要のある単一エントリ・ポイントとなる、デフォルト・アクティビティを指定します。
これは、同一または別のMAF AMXアプリケーション機能内で再利用可能です。
バインド・タスク・フロー内で使用するマネージドBeanは、ページ・フロー・スコープで指定できるため、残りのMAF AMXアプリケーション機能からは分離されます。これらのマネージドBean(およびページ・フロー・スコープ)は、タスク・フローが完了した際に自動的に解放されます。
次に、バインド・タスク・フローの主な特性のサマリーを示します。
適切に定義された境界: バインド・タスク・フローは、プライベート制御フロー・ルール、アクティビティおよびマネージドBeanの独自のセットで構成されます。コール元は、バインド・タスク・フロー境界内におけるページ名、メソッド・コール、子バインド・タスク・フロー、マネージドBean、制御フロー・ルールの内部知識を必要としません。データ・コントロールはタスク・フロー間で共有できます。
単一のエントリ・ポイント: バインド・タスク・フローには、タスク・フロー内の他のすべてのアクティビティの前に実行されるデフォルト・アクティビティである、単一のエントリ・ポイントがあります。
ページ・フロー・メモリー・スコープ: バインド・タスク・フロー内のアクティビティ間でデータを受け渡すためのメモリー・スコープとしてページ・フロー・スコープを指定できます。ページ・フロー・スコープは、バインド・タスク・フローの各インスタンスに対する一意の記憶域を定義します。その存続期間はバインド・タスク・フローであり、requestスコープより長く、sessionスコープより短くなっています。
指定可能: バインド・タスク・フローにアクセスするには、バインド・タスク・フローのXMLソース・ファイルに記述されている一意の識別子とXMLソース・ファイルのファイル名を指定します。
再利用可能: アクティビティ・グループ全体を単一のエンティティ、つまりバインド・タスク・フローとして指定し、そのバインド・タスク・フローをMAFアプリケーション内の別のMAF AMXアプリケーション機能で再利用できます。
また、既存のバインド・タスク・フローは、コールすることで再利用できます。
さらに、タスク・フロー・テンプレートを使用して、様々なバインド・タスク・フローで再利用するための共通の動作を取得できます。
パラメータおよび戻り値: コール元は、入力パラメータをバインド・タスク・フローに渡し、そこから戻り値を受け取ることができます(「バインド・タスク・フローへのパラメータ渡し」および「バインド・タスク・フローの戻り値の構成」を参照)。
また、バインド・タスク・フロー間でデータ・コントロールを共有できます。
メタデータのオンデマンド・ロード: バインド・タスク・フロー・メタデータは、バインド・タスク・フローの開始時にオンデマンドでロードされます。
入力パラメータを受け取り、パラメータ値を戻すタスク・フローの機能によって、タスク・フローのデータを操作できる他、タスク・フロー間でデータを共有できます。この機能を使用して、MAF AMXアプリケーション機能でのタスク・フローの再利用を最適化できます。
pageFlowスコープ内のユーザーに関する情報を保持する入力パラメータ定義を指定するタスク・フローを図に示します。
タスク・フロー・コール・アクティビティを使用してバインド・タスク・フローをコールする場合、標準EL式を使用してパラメータ値を指定できます。たとえば、次のEL式の構文を使用してパラメータを指定できます。
#{bindings.bindingId.inputValue}
#{CustomerBean.zipCode}
inputValue
をEL式に追加することで、実際のバインディング・オブジェクトではなく、バインディングの値をパラメータに確実に割り当てられます。
コール先のバインド・タスク・フローは、コール元のタスク・フローまたはタスク・フロー・バインディングから入力パラメータを受け取ることができます。
バインド・タスク・フローに入力パラメータを渡すには、次のうちの1つまたは複数を指定します。
コール元のタスク・フローでのタスク・フロー・コール・アクティビティの入力パラメータ: 入力パラメータによって、パラメータ値を格納するコール元のタスク・フローの場所が指定されます。
コール元のバインド・タスク・フローの入力パラメータ定義: 入力パラメータ定義によって、実行時にコール先のバインド・タスク・フローがパラメータ値を取得できる場所が指定されます。
コール元のタスク・フローにあるタスク・フロー・コール・アクティビティで定義する入力パラメータおよびコール先のバインド・タスク・フローの入力パラメータ定義と同じ名前を指定します。これを行うことで、コール先のバインド・タスク・フローに入力パラメータ値をマップできます。
入力パラメータの値を参照するEL式を指定しない場合は、valueのEL式のデフォルト値を実行時に次のように設定します。
#{pageFlowScope.parmName}
ここで、parmName
は、入力パラメータ名に入力した値です。
コール先のバインド・タスク・フローの入力パラメータ定義では、必要に応じて入力パラメータを指定できます。入力パラメータが実行時または設計時に値を受け取らない場合、タスク・フローは、そのタスク・フローを含むMAFアプリケーションのログ・ファイル内に警告を生成します。必要に応じて指定しない入力パラメータは、タスク・フロー・コール・アクティビティの作成時に無視できます。
タスク・フロー・コール・アクティビティを使用してタスク・フローをコールする場合は、タスク・フロー・コール・アクティビティの入力パラメータを参照渡しまたは値渡しにできます(「タスク・フロー・コール・アクティビティでの入力パラメータの指定」を参照)。デフォルトでは、プリミティブ・タイプ(int
、long
、boolean
など)が値渡し(pass-by-value
)されます。
コール先のタスク・フローは、終了時にコール元のタスク・フローに値を戻すことができます。「バインド・タスク・フローの戻り値の構成」を参照してください。
入力パラメータをバインド・タスク・フローに渡す場合、コール元のタスク・フローとコール先のタスク・フローの両方で値を定義します。
始める前に:
コール元およびコール先のタスク・フローを作成します(コール元のタスク・フローはバインドまたはバインドなしにすることができます)。コール先のタスク・フローはバインドにする必要があります。タスク・フローの作成の詳細は、「タスク・フローの作成方法」を参照してください。
タスク・フロー・コール・アクティビティをコール元のタスク・フローに追加します。
ビュー・アクティビティがタスク・フロー・コール・アクティビティに制御を渡す例を図に示します。
入力パラメータをバインド・タスク・フローに渡すには:
エンド・ユーザーが実行時にバインド・タスク・フローにパラメータとして渡される値を入力する際に使用する入力コンポーネントを含むMAF AMXページを開きます。
注意:
開いたMAF AMXページは、コール元のタスク・フローにあるビュー・アクティビティによって参照される必要があります。
エンド・ユーザーが実行時に値を入力するMAF AMXページで入力テキスト・コンポーネントを選択します。
「プロパティ」ウィンドウで、「共通」セクションを開いて、「値」フィールドに入力テキスト・コンポーネントの値を入力します。
値はEL式として(たとえば#{pageFlowScope.inputValue}
)、手動で、または式ビルダーを使用して指定できます。
「アプリケーション」ウィンドウで、コールするタスク・フローをダブルクリックして開いた後、ビューを「概要」タブに切り替え、「パラメータ」ナビゲーション・タブを選択します。
「入力パラメータの定義」セクションで、「追加」( + )をクリックして新しいエントリを指定します(図13-26を参照)。
「名前」フィールドで、パラメータ名(inputParm1
など)を入力します。
「値」フィールドで、パラメータ値を格納および参照するEL式(たとえば#{pageFlowScope.inputValue}
)を手動で、または式ビルダーを使用して入力します。
「アプリケーション」ウィンドウで、コール先のバインド・タスク・フローを起動するタスク・フロー・コール・アクティビティを含むコール元タスク・フローをダブルクリックします。
「アプリケーション」ウィンドウで、コール元のタスク・フローのダイアグラムにあるタスク・フロー・コール・アクティビティの最上部に、コール先のバインド・タスク・フローをドラッグ・アンド・ドロップします。これにより、バインド・タスク・フローに対するタスク・フローの参照が自動的に作成されます。次の図に示すように、タスク・フロー参照には次のものが含まれます。
バインド・タスク・フローのID (id
): バインド・タスク・フローのtask-flow-definition
要素の属性。
IDを含むタスク・フローのソース・ファイルを指すドキュメント名。
タスク・フロー・コール・アクティビティの「プロパティ」ウィンドウで、「パラメータ」セクションを開いて、「入力パラメータ」セクションを表示します。
入力パラメータを識別する名前を入力します(入力パラメータを定義済のタスク・フロー・コール・アクティビティの上にバインド・タスク・フローをドロップしたため、名前はすでに指定されています)。同じ入力パラメータ名を維持する必要があります。
パラメータ値(たとえば#{pageFlowScope.param1}
)を入力します(タスク・フロー・コール・アクティビティの入力パラメータの値によって、コール元のタスク・フローがパラメータ値を格納する場所が指定されます)。コール先のタスク・フローの入力パラメータ定義の値は、渡された後にコール先のバインド・タスク・フロー内で使用する値が取得される場所を指定します。
実行時、コール先のタスク・フローは入力パラメータを使用できます。コール先のタスク・フローの入力パラメータ定義で値としてpageFlowScope
を指定したため、コール先のバインド・タスク・フローのどこでもパラメータ値を使用できます。たとえば、コール先のバインド・タスク・フローのビュー・アクティビティにパラメータ値を渡すことができます。
完了すると、選択した値に基づいて、コール元のタスク・フローとコール先のタスク・フローのソース・ファイルにエントリが書き込まれます。
次の例は、バインド・タスク・フローで指定された入力パラメータ定義を示しています。
<task-flow-definition id="sourceTaskflow"> ... <input-parameter-definition> <name>inputParameter1</name> <value>#{pageFlowScope.parmValue1}</value> <class>java.lang.String</class> </input-parameter-definition> ... </task-flow-definition>
次の例は、前の例に示したバインド・タスク・フローをコールするタスク・フロー・コール・アクティビティの入力パラメータ・メタデータを示しています。
<task-flow-call id="taskFlowCall1"> ... <input-parameter> <name>inputParameter1</name> <value>#{pageFlowScope.newCustomer}</value> <pass-by-value/> </input-parameter> ... </task-flow-call>
実行時に、タスク・フロー・コール・アクティビティはバインド・タスク・フローをコールして、そのvalue要素で指定された値を渡します。
コール先のタスク・フローにある戻り値の定義を構成し、実行時に戻り値を取得するコール元のタスク・フローのタスク・フロー・コール・アクティビティにパラメータを追加します。
始める前に:
バインド・タスク・フローまたはバインドなしタスク・フローを(コール元のタスク・フローに対して)作成し、バインド・タスク・フローを(コール先のタスク・フローに対して)作成します。「タスク・フローの作成方法」を参照してください。
コール先のバインド・タスク・フローの戻り値を構成するには:
完了すると、構成したコール元のタスク・フローのソース・ファイルにエントリが書き込まれます。
次の例では、コール元のタスク・フローのソース・ファイルに対してJDeveloperで記述したサンプル・エントリを示しています。
<task-flow-call id="taskFlowCall1"> <return-value id="__3"> <name id="__4">returnValue1</name> <value id="__2">#{pageFlowScope.ReturnValueDefinition}</value> </return-value> </task-flow-call>
次の例では、コール先のタスク・フローのソース・ファイルに対してJDeveloperで記述したサンプル・エントリを示しています。
<return-value-definition id="__2"> <name id="__3">returnValue1</name> <value>#{pageFlowScope.ReturnValueDefinition}/</value> <class>java.lang.String</class> </return-value-definition>
実行時に、コール先のタスク・フローが値を返します。この構成の場合は、コール元のタスク・フローにあるタスク・フロー・コール・アクティビティがその値を取得します。
データ・コントロールを追加し、コンポーネントをMAF AMXページにドラッグ・アンド・ドロップすることで、ビューを作成できます。
MAF AMXビューの作成は、次のことから開始できます。
MAF AMXページ構造の理解(「MAF AMXページ構造の解釈」を参照)
MAF AMXページの編集とプレビュー(「UIエディタの使用方法」を参照)
MAF AMXページへのコンポーネントのドラッグ・アンド・ドロップ(「MAF AMXページにUIコンポーネントを追加する方法」を参照)
ビューへのデータ・コントロールの追加(「MAF AMXページへのデータ・コントロールの追加方法」を参照)
MAF AMXページは、構造がページのプレゼンテーションと機能を定義している階層化要素から構成されるXMLファイルで表現されています。
次にMAF AMXファイルの基本構造を示します。
<amx:view> <amx:panelPage id="pp1"> <amx:facet name="header"> <amx:outputText id="ot1" value="Welcome"/> … </amx:facet> </amx:panelPage> </amx:view>
データ視覚化コンポーネント(「データ視覚化の指定」を参照)を除き、UI要素は<amx>
名前空間の下で宣言されます。
「MAF AMXページの作成時に行われる処理」を参照してください。
MAF AMXファイルは、MAFアプリケーションのビュー・コントローラ・プロジェクトに含まれています。これらのファイルは、「MAF AMXページの作成」ダイアログを使用して作成します。
MAFでは、MAF AMXページの作成方法がこれ以外に2通りあります。
「新規ギャラリ」から
既存のタスク・フローから
始める前に:
MAF AMXページを作成するには、MAFアプリケーションにビュー・コントローラ・プロジェクト・ファイルが含まれている必要があります(「MAFアプリケーション開発のスタート・ガイド」を参照)。
「新規ギャラリ」からMAF AMXページを作成するには:
JDeveloperのトップレベル・メニューから「ファイル」をクリックし、「新規」→「ギャラリから」を選択します。
図に示すように、「新規ギャラリ」で、「クライアント層」ノードを開き、「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ」の順に選択します。「OK」をクリックします。
次の図に示すように、「MAF AMXページの作成」ダイアログで、新しいファイルの名前および(必要な場合は)場所を入力します。
オプションで、ページ・レイアウトの一部としてどのファセットを新しいMAF AMXページに含めるかを選択することもできます。
ヘッダー
プライマリ
セカンダリ
フッター
詳細は、「MAF AMXページの作成時に行われる処理」および「ファセット・コンポーネントの使用方法」を参照してください。
注意:
ファセットを選択または選択解除すると、変更されたページの外観を反映するよう、ページを表すイメージは動的に変わります。
注意:
ファセットの選択はMAFによって保持され、それ以降に「MAF AMXページの作成」ダイアログが開かれるたびにその選択が適用されます。
新しいページのためのページ・レイアウトを選択します。「クイック・スタート・レイアウト」では、すばやく簡単に正しくレイアウトを構築するための事前定義済のコンポーネントが使用されます。使用するページ・レイアウトのタイプを選択します(「基本」、「分割」など)。「コンテンツ・レイアウト」内のオプションのリストは、「ページ・レイアウト」選択内容に基づいて適切なオプションが表示されるようフィルタされます。
「MAF AMXページの作成」ダイアログで、「OK」をクリックします。
タスク・フローのビュー・コンポーネントからMAF AMXページを作成するには:
「MAF AMXページの作成」ダイアログを使用してMAF AMXページを作成すると、JDeveloperによって物理ファイルが作成されて、ビュー・コントローラ・プロジェクトのWeb Content
ディレクトリに追加されます。
図に示す「アプリケーション」ウィンドウでは、「Webコンテンツ」
ノードに、新たに作成されたdepartment.amx
というMAF AMXファイルが含まれています。
JDeveloperは、コンポーネント・ライブラリをインポートし、ページを表示するために必要なコードの追加も行います。このコードは、上の図に示す「ソース」エディタに表示されます。
図13-33に、ページの作成時に「MAF AMXページの作成」ダイアログの「ページ・ファセット」セクションにリストされたすべてのファセット・タイプを選択した場合に(次の図を参照)、「プレビュー」ペインおよび生成されたMAF AMXコードがどのようになるかを示します。
すべてのファセットを選択して作成したページ(上の図を参照)では、次の点に注意してください。
ヘッダーは出力テキスト・コンポーネントで作成されます。これはこのコンポーネントが通常ページ・タイトルに使用されるためです。
プライマリおよびセカンダリのアクションは、ボタン・コンポーネントで作成されます。これは、これが通常のパターンであるためです。
フッターの場合、1つだけ群を抜いているパターンはないため、デフォルトでは出力テキスト・コンポーネントで作成されます。これは、このコンポーネントがいくつかのパターンで使用されており、JDeveloperが監査違反のある初期コードを生成することを回避できるためです。
ヘッダー・ファセットを追加せずにプライマリ・アクションまたはセカンダリ・アクションのいずれかを追加しても、ヘッダー・セクションは「MAF AMXページの作成」ダイアログの「ページ・ファセット」セクションに表示されます。
図は「MAF AMXページの作成」ダイアログの「ページ・ファセット」セクションを示しています。ファセットは選択されていません。
図は、生成されたMAF AMXコードを含む「プレビュー」ペインを示しています。
最初にJDeveloperに表示されるとき、ページは「ソース」エディタに表示されます。WYSIWYG環境でページを表示するには、「プレビュー」ペイン(「プレビュー」タブをクリックしてアクセスします)を使用します。
新たに作成されたdepartment.amx
というMAF AMXページに対して選択された「プレビュー」ペインを図に示します。まだMAF AMX UIコンポーネントやデータ・コントロールが移入されていないため、このページは空白です。
図に示す「プレビュー」ペインのツールバーを使用すると、次のことができます。
「ページのリフレッシュ」をクリックすると、MAF AMXページの表示をリフレッシュできます。
「ページのロードを中止」をクリックすると、ページのロードを中止できます。
ドロップダウン・リストから別のフォーム・ファクタを選択すると、ページのフォーム・ファクタを変更できます。フォーム・ファクタの詳細は、『Oracle Mobile Application Frameworkのインストール』のフォーム・ファクタに応じた開発環境の構成に関する項 を参照してください。
ドロップダウン・リストから別のパーセント値を選択すると、表示のスケーリングを変更できます。モバイル・デバイスは様々なサイズおよび密度で表示されるため、「プレビュー」ペインでは、MAF AMXページでのスケーリングの効果を確認できます。
注意:
スケーリングは縦と横の両方のモードで使用できます。
「縦向きの表示」または「横向きの表示」を選択することにより、表示の向きをそれぞれ横または縦に変更できます。
使用可能なアプリケーション機能のドロップダウン・リストから、MAF AMXページの機能コンテンツを選択します。デフォルトでは、「機能コンテンツが選択されていません」が表示されます。
ソース・エディタでページのソースを表示するには、図13-31に示す「ソース」タブをクリックします。JDeveloperの左下部にある「構造」ウィンドウ(図13-31および図13-36を参照)には、ページが階層形式で表示されます。詳細は、「「プレビュー」の使用方法」を参照してください。
MAF AMXでは、MAF AMXページ定義にナビゲートできる、JDeveloperの「ページ定義に移動」機能がサポートされているため(図および「生成されるドラッグ・アンド・ドロップ・アーティファクトに関する必知事項」を参照)、ポップアップ・メニューを使用することで、バインディング情報をすばやく見つけて編集できます。
次の場所から「ページ定義に移動」オプションを含むポップアップ・メニューを起動できます。
ソース・エディタ(図を参照)。
「アプリケーション」ウィンドウ(図を参照)。
「構造」ウィンドウ(図を参照)。
さらに、図に示すように、メイン・メニューの「ツール」→「プリファレンス」の下で定義されている「ページ定義に移動」ショートカット・キーを使用して、ページ定義ファイルを開くこともできます。
MAF AMXページのコンテンツの共有を有効にできます。フラグメント(fragment
)は、MAF AMXページ要素の再利用可能な部分(属性やファセットなど)をテンプレートで表されるコンテンツに挿入できるようにする動的な宣言コンポーネントです。アプリケーションの様々なページでFragmentテンプレートを再利用することで、アプリケーションのルック・アンド・フィールを標準化できます。
MAF AMXフラグメント・ファイル( .amxf
)をMAF AMXページまたは別のフラグメント・ファイルにドラッグ・アンド・ドロップして、フラグメントへの参照を作成し、その属性を定義できます(「フラグメント・コンテンツの構成」を参照)。フラグメント・ファイルはプロジェクト内部に存在し、「アプリケーション」ウィンドウからドロップできます。
始める前に:
MAFアプリケーションにビュー・コントローラ・プロジェクトが含まれていることを確認してください。
ビュー・コントローラ・プロジェクトに、MAF AMXページも、ページの作成元のMAF AMXページ・タスク・フローも含まれない場合は、タスク・フロー・ダイアグラムで「表示」アイコンをダブルクリックするか、「新規ギャラリ」から「クライアント層」→「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ」を選択することにより、「MAF AMXページの作成」ダイアログを起動できます(「MAF AMXページの作成」を参照)。
「新規ギャラリ」からフラグメントを作成するには:
JDeveloperのトップレベル・メニューから「ファイル」をクリックし、「新規」→「ギャラリから」を選択します。
図に示すように、「新規ギャラリ」で、「クライアント層」ノードを開き、「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ・フラグメント」の順に選択します。「OK」をクリックします。
図に示すように、「MAF AMXページ・フラグメントの作成」ダイアログに新しいフラグメントのファイル名と場所を入力します。「OK」をクリックします。
ダイアログへの入力が完了すると、図に示すように、新しく作成したファイルがJDeveloperのソース・エディタ内に開きます。
「構造」ウィンドウで「フラグメント」を右クリックし、「フラグメントの中に挿入」を選択します。図に示す、新しいフラグメントを移入する要素を選択します(「属性」、属性リスト、「説明」、「ファセット」または「ポップアップ」)。
引き続き、「構造」ビューでフラグメントの子を右クリックして適切な値を選択することにより、フラグメントの「属性」および他の子を定義します(図を参照)。
フラグメントを定義するには、図に示すように、「コンポーネント」ウィンドウで「MAF AMXフラグメント」を選択して、その要素をMAF AMXフラグメント・ファイルにドラッグ・アンド・ドロップする方法もあります。
次の例は、fragment1.amxf
という名前のMAF AMXフラグメント・ファイルを示しています。
<amx:fragmentDef xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amx="http://xmlns.oracle.com/adf/mf/amx" xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt"> <fragment xmlns="http://xmlns.oracle.com/adf/mf/amx/fragment" id="f1"> <description id="d1">Description of the fragment</description> <facet id="f2"> <description id="d4">Description of the facet</description> <facet-name id="f3">facet1</facet-name> </facet> <attribute id="a1"> <description id="d2">Description of an attribute</description> <attribute-name id="a2">text</attribute-name> <attribute-type id="at1">String</attribute-type> <default-value id="d3">defaultValue</default-value> </attribute> </fragment> <amx:panelGroupLayout id="pgl1"> <amx:facetRef facetName="facet1" id="fr1"/> <amx:outputText value="#{text}" id="ot1"/> </amx:panelGroupLayout> </amx:fragmentDef>
MAF AMXページにフラグメントのコンテンツを含めるには、フラグメント・コンポーネントを作成して(「フラグメント・コンポーネントの使用方法」を参照)、選択したフラグメント・ファイルにそのsrc
属性を設定します。次の例は、MAF AMXページに追加されたfragment
要素を示しています。この要素は、そのページ・コンテンツとしてfragment1.amxf
を指します。同時に、ファセット定義MAF AMXコンポーネントに対応するfacetRef
要素は、そのfacet
(MAF AMX Facetコンポーネント)としてfacet1
を指します。facetRef
要素は、.amxf
ファイルのfragmetDef
内でのみ指定できます。MAF AMXのattribute
要素を子として指定することで、属性をfacetRef
に渡すことができ、これにより、attribute
の値を介してフラグメントからファセットにEL変数を渡すことができます。
<?xml version="1.0" encoding="UTF-8" ?> <amx:view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amx="http://xmlns.oracle.com/adf/mf/amx" xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt"> <amx:panelPage id="pp1"> <amx:panelGroupLayout layout="vertical" id="itemPgl" styleClass="amx-style-groupbox"> <amx:fragment id="f1" src="/simpleFragment.amxf" <amx:attribute id="a1" name="text" value="defaultValue" /> <amx:facet name="facet"> <amx:outputText id="ot5" value="Fragment"/> </amx:facet> </amx:fragment> </amx:panelGroupLayout> </amx:panelPage> </amx:view>
フラグメントは、その属性を介してすべての情報を受け取ります。個々の属性を定義する以外に、フラグメントにリストとして渡す一連の属性を定義でき、それらをフラグメント定義で繰り返し使用できます。「フラグメントへの属性リストおよびメタデータの受渡し」を参照してください。
注意:
フラグメント・ファイル(.amxf
)内で使用されるEL式は検証されません。
フラグメントは次のものをサポートしています。
埋込みポップアップ(「ポップアップ・コンポーネントの使用方法」を参照)。
1つ以上の別の親ページまたはフラグメントに配置できる再利用可能なユーザー・インタフェースこれにより、バインドなしで他のコンポーネントから成るコンポーネントを作成できます。
独自のファセットの定義。これにより、ヘッダー・ファセット、サマリー・ファセットおよび詳細ファセットをファセットごとに独自のスタイル・クラスとルック・アンド・フィールを設定しながら定義するレイアウト・コンポーネントなどのコンポーネントを作成できます。
属性とコレクションの両方を備えたデータ・モデル。
MAFサンプル・アプリケーション(FragmentDemoおよびCompGallery)によって、フラグメントの作成方法と使用方法を示します。これらのサンプル・アプリケーションは、開発コンピュータ上のjdev_install
/jdeveloper/jdev/extensions/oracle.maf/Samples
ディレクトリのPublicSamples.zip
ファイル内にあります。
MAF AMXフラグメント・ファイル(.amxf
)をMAF AMXページまたは別のフラグメント・ファイルにドラッグ・アンド・ドロップすると、図に示すように、「フラグメント・コンテンツの構成」ダイアログが表示されます。このダイアログが表示されると、フラグメントの直接の子として定義されたすべてのフラグメント属性を指定できます。
注意:
「フラグメント・コンテンツの構成」ダイアログでは、ファセット・コンポーネント、ポップアップ・コンポーネント、属性リストおよびそのアーティファクトは使用できません。
MAF AMXフラグメント・ファイル(そのコンテンツは次の例を参照)をMAF AMXファイルにドラッグ・アンド・ドロップしたときに表示される「フラグメント・コンテンツの構成」ダイアログを図に示します。
<amx:fragmentDef xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amx="http://xmlns.oracle.com/adf/mf/amx" xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt"> <fragment xmlns="http://xmlns.oracle.com/adf/mf/amx/fragment" id="f1"> <description id="d1">Description of the fragment</description> <facet id="f2"> <description id="d4">Description of the facet</description> <facet-name id="f3">facet1</facet-name> </facet> <attribute id="a1"> <description id="d2">Description of an attribute</description> <attribute-name id="a2">text</attribute-name> <attribute-type id="at1">String</attribute-type> <default-value id="d3">defaultValue</default-value> </attribute> </fragment> <amx:panelGroupLayout id="pgl1"> <amx:facetRef facetName="facet1" id="fr1"/> <amx:outputText value="#{text}" id="ot1"/> </amx:panelGroupLayout> </amx:fragmentDef>
ダイアログに入力する際は、次の点を考慮してください。
フラグメントで必須として定義された属性を構成する場合は、属性名の末尾にアスタリスク(*)が表示されます。
必須の属性値をすべて定義するまで、ダイアログの「OK」ボタンは無効です。
フラグメント属性のデフォルト値が指定されており、同時にrequired
プロパティが定義されていてtrue
に設定されている場合、この属性は必須として扱われません(デフォルト値が優先されます)。この場合は、次のようになります。
フラグメントに監査警告が表示されます。
「フラグメント・コンテンツの構成」ダイアログで、属性の名前にアスタリスクが追加されず、この属性は必須として扱われません。
「タイプ」列に、フラグメントからのattribute-type
要素の値が表示されます。これは、(Javaクラスとは異なり)属性タイプの説明として使用されます。
注意:
attribute-type
はフラグメントで必須要素ですが、その値を定義しなかった場合は、ドロップするフラグメントで未指定として表示されることがあります。この場合、ダイアログにデフォルト値として「文字列」が表示されます。
「値」列では、フラグメントの属性に渡す値を指定できます。値を入力するには、タイピングするか、省略記号(…)をクリックしてELビルダーを起動し、EL式を指定します。フラグメント内の特定の属性にdefault
要素が存在する場合、このデフォルト値はその属性の「値」列で指定されています。デフォルト値はオーバーライドできます。
フラグメント内にこの属性に対するdescription
要素が存在する場合、異なる属性の行を切り替えると、ダイアログの下部に「属性の説明」フィールドが表示されます。description要素が定義されていない場合、「属性の説明」フィールドは空白になります。
「フラグメント・コンテンツの構成」ダイアログを使用して属性の追加、削除または並替えを行うことはできません。
フラグメント属性を定義する場合、MAFでは次の操作を実行できます。
動的属性の受渡し
各属性とメタデータとの関連付け(「フラグメントへの属性リストおよびメタデータの受渡し」を参照)。
フラグメント定義内の属性に対するループ処理
属性内での動的属性のネスト
あるフラグメントから埋込みフラグメントへの動的属性の受渡し
属性のリストを渡すことを可能にする、MAF AMX fragment
の直接および間接の子要素を表にリストします。
表13-4 フラグメントの属性関連の子要素
子属性名 | 説明 |
---|---|
|
フラグメントに渡す属性リストを定義します。MAF AMX 親要素には、子
異なるフラグメント間で属性リストを参照渡しできますが、この場合は、両方の属性リストに同じメタデータが含まれている必要があります。 |
|
MAF AMX MAF AMX 親 |
|
MAF AMX ある 繰り返しの間、定義された属性名がEL変数として公開されます。コール元から属性が提供されていない場合や、属性にデフォルト値がない場合は、値 |
属性およびその値の詳細は、Oracle Mobile Application Frameworkタグ・リファレンスを参照してください。
次の例は、属性リストをMAF AMXフラグメントに渡す基本的な方法を示しています。
<amx:fragment src="something.amxf"> <amx:attributeList name="attributeToPass" ref="nameOfAnOuterAttributeList" /> </amx:fragment>
次の例は、MAF AMXファイルで定義された子attributeList
を持つfragment
要素を示しています。
<amx:fragment src="summaryView.amxf"> <amx:attributeList name="attrs"> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.firstName}"/> <amx:attribute name="displayType" value="string" /> </amx:attributeSet> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.lastName}"/> <amx:attribute name="displayType" value="string" /> </amx:attributeSet> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.homePhone}"/> <amx:attribute name="displayType" value="phone" /> </amx:attributeSet> </amx:attributeList> </amx:fragment>
次の例は、MAF AMXファイルのfragment
要素内で定義されているネストされたattributeList
要素を示しています。
<amx:fragment src="summaryView.amxf"> <amx:attributeList name="attrs"> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.firstName}"/> <amx:attribute name="displayType" value="string" /> </amx:attributeSet> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.lastName}"/> <amx:attribute name="displayType" value="string" /> </amx:attributeSet> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.homePhone}"/> <amx:attribute name="displayType" value="phone" /> </amx:attributeSet> <amx:attributeSet> <amx:attributeList name="subAttributes"> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.spouseFirstName}"/> <amx:attribute name="displayType" value="string" /> </amx:attributeSet> <amx:attributeSet> <amx:attribute name="attribute" value="#{bindings.spouseLastName}"/> <amx:attribute name="displayType" value="string" /> </amx:attributeSet> </amx:attributeList> <amx:attribute name="label" value="Spouse"/> </amx:attributeSet> </amx:attributeList> </amx:fragment>
次の例は、定義済の属性リスト・コンポーネントがフラグメント定義内でどのように使用されるかを示しています。amxf:attribute-list
タグは、属性リストのメタデータを定義しています。このタグは、amxf:fragment
または別のamxf:attribute-list
タグの子として宣言する必要があり、その有効な子タグはamxf:name
、amxf:description
、amxf:attribute-list
およびamxf:attribute
です。子name
は必須であり、現在のXMLノード内で一意である必要があります。nameを同じレベルで宣言されているamxf:attribute
と同一にすることもできますが、このようなネーミング慣例はお薦めしません。
<amx:fragmentDef xmlns:amx="http://xmlns.oracle.com/adf/mf/amx" xmlns:dvtm="http://xmlns.oracle.com/adf/mf/amx/dvt"> <fragment xmlns="http://xmlns.oracle.com/adf/mf/amx/fragment"> <attribute-list> <name>attributes</name> <attribute> <attribute-name>attribute</attribute-name> </attribute> <attribute> <attribute-name>displayType</attribute-name> </attribute> <attribute> <attribute-name>label</attribute-name> </attribute> <attribute-list> <name>subAttributes</name> <attribute> <attribute-name>attribute</attribute-name> </attribute> <attribute> <attribute-name>displayType</attribute-name> </attribute> </attribute-list> </attribute-list> </fragment> ... <amx:attributeListIterator name="attributes"> <amx:panelLabelAndMessage label="#{attribute.hints.label}" id="plam1" rendered="#{not (empty attribute)}"> <amx:outputText value="#{attribute.inputValue}" id="ot1"/> </amx:panelLabelAndMessage> <amx:outputText value="#{label}" id="ot2" rendered="#{not (empty label)}"/> <amx:attributeListIterator name="subAttributes" rendered="#{not (empty subAttributes)}"> <amx:panelLabelAndMessage label="#{attribute.hints.label}" id="plam2" rendered="#{not (empty attribute)}"> <amx:outputText value="#{attribute.inputValue}" id="ot3"/> </amx:panelLabelAndMessage> </amx:attributeListIterator> </amx:attributeListIterator> ... </amx:fragmentDef>
attribute-list
、attribute-set
およびattribute
の各タグは、fragment
ノード内で次のものを定義するために使用できます。
使用できる属性リスト・コンポーネント
フラグメントのコール元のページを検証するために必要な情報
MAF AMXページの作成後は、ページへのMAF AMX UIコンポーネントの追加を開始できます。
「コンポーネント」ウィンドウを使用して、MAF AMXコンポーネントおよびMAF AMXデータ視覚化コンポーネントをページにドラッグ・アンド・ドロップできます。コンポーネントを追加すると、必要な宣言的ページ・コードが追加され、各コンポーネント属性に特定の値が設定されます。
「コンポーネント」ウィンドウには、MAF AMXコンポーネントがカテゴリ別に表示されます。
一般コントロール
テキストおよび選択
データ・ビュー
レイアウト。次のサブカテゴリがあります。
対話型コンテナおよびヘッダー
セカンダリ・ウィンドウ
コア構造
操作。次のサブカテゴリがあります。
動作
リスナー
バリデータおよびコンバータ
特定のコンポーネントの追加および使用については、「UIコンポーネントの作成と使用方法」を参照してください。
「コンポーネント」ウィンドウには、MAF AMXデータ視覚化コンポーネントもカテゴリ別に表示されます。
共通: 次のサブカテゴリがあります。
チャート
ゲージ
マップ
その他
共有子タグ
その他のタイプ固有の子タグ: 次のサブカテゴリがあります。
チャート
ゲージ
NBox
テーマ・マップ
時系列
サンバーストおよびツリーマップ
始める前に:
MAFアプリケーションには、ビュー・コントローラ・プロジェクトが含まれている必要があり、このプロジェクトには、MAF AMXページまたはページの作成元のMAF AMXページのタスク・フローが含まれている場合と含まれていない場合があります。
「MAF AMXページの作成」で説明されているように、タスク・フロー・ダイアグラムで「表示」アイコンをダブルクリックするか、「新規ギャラリ」から「クライアント層」→「モバイル・アプリケーション・フレームワーク」→「MAF AMXページ」を選択することにより、「MAF AMXページの作成」ダイアログを起動できます。
UIコンポーネントをページに追加するには:
「ソース」エディタでMAF AMXページを開きます(デフォルト)。
図に示すように、「コンポーネント」ウィンドウで、メニューを使用して「MAF AMX」を選択します。
ヒント:
「コンポーネント」ウィンドウが表示されていない場合は、JDeveloperのメイン・メニューから「ウィンドウ」→「コンポーネント」を選択します。デフォルトでは、「コンポーネント」はJDeveloperの右上部に表示されます。
使用するコンポーネントを選択し、「ソース」エディタまたは「構造」ウィンドウにドラッグ・アンド・ドロップします。「プレビュー」ペインにコンポーネントをドロップすることはできません。
注意:
MAF AMXページを作成する際、UIコンポーネントは、「パネル・グループ・レイアウト」などのUIコンテナにのみドロップできます。
新たに追加されたコンポーネントを使用して、JDeveloperで「プレビュー」ペインのページが再描画されます。
あるいは、次のようにして、「構造」ウィンドウからUIコンポーネントおよびデータ視覚化コンポーネントを追加することもできます。
「構造」ウィンドウで、別のコンポーネントを挿入するための開始ポイントとして使用する既存のコンポーネントを選択します。
図に示すように、選択したコンポーネントを右クリックして、「<コンポーネント>の前に挿入」、「<コンポーネント>の中に挿入」または「<コンポーネント>の後ろに挿入」のいずれかのオプションを選択します。
ポップアップ・メニューから、「MAF AMX」または「MAF AMXデータ視覚化」を選択します。
図に示すように、「MAF AMX」を選択すると、「MAF AMXアイテムの挿入」ダイアログが開き、ページに追加するUIコンポーネントを選択できます。
図に示すように、「MAF AMXデータ視覚化」を選択すると、「MAF AMXデータ視覚化アイテムの挿入」ダイアログが開き、ページに追加するデータ視覚化コンポーネントを選択できます。
新たに追加されたコンポーネントを使用して、JDeveloperで「プレビュー」ペインのページが再描画されます。
MAF AMXファイルを使用してユーザー・インタフェースを構築する際、JDeveloperの「プレビュー」では、iOSとAndroidの両方のプラットフォームに対してWYSIWYGサポートを提供します。図に示すように、ビューを分割した状態で、MAF AMXコンポーネントをMAF AMXファイルに追加すると、コード・ビューは「ソース」エディタから、UIビューは「プレビュー」ペインから同時に確認できます。これにより、ソースを変更してすぐに、iOSとAndroidの両方のプラットフォームで、そのアプリケーションの変更されたルック・アンド・フィールを表示できます。
デザイン・ビューとソース・ビューを同時に確認できる以外に、複数のデザイン・ビューを同時に開いて使用し、それぞれを異なるプラットフォームおよび画面サイズに設定できます。様々なデバイスのデザイン・ビューの組合せを開くことで、様々なプラットフォームおよびフォーム・ファクタに対し、同時に、異なる向きでアプリケーションを開発できます。上段がiPhone、下段が75%のスケーリングのiPadの分割画面を図に示します。「プレビュー」ペインは、JDeveloperのデフォルトの分割機能を使用して分割できます。
注意:
無効なMAF AMXファイルであっても、MAF AMXページはレンダリングされます。エラーはコンポーネントのエラー・アイコンで示されます。マウスをエラー・アイコンの上に移動すると、エラーの詳細を表示できます。
UIコンポーネントをページにドロップした後、「プロパティ」ウィンドウ(デフォルトではJDeveloperの右下部に表示)を使用して、各コンポーネントの属性値を設定できます。
ヒント:
「プロパティ」ウィンドウが表示されていない場合は、JDeveloperのメイン・メニューから「ウィンドウ」→「プロパティ」を選択します。
出力テキスト・コンポーネントの属性が表示された「プロパティ」ウィンドウを図に示します。
コンポーネント属性の設定手順:
「プロパティ」ウィンドウを使用して属性値を設定または変更すると、入力された値に合致するように、属性のページ・ソースがJDeveloperで自動的に変更されます。
ヒント:
「ソース」エディタでページを直接編集することで、いつでも属性値を変更できます。「ソース」エディタにページを表示するには、ページの下部の「ソース」タブをクリックします。
「コンポーネント」ウィンドウからコンポーネントをドロップするか、データ・コントロールをドラッグ・アンド・ドロップすることにより要素を追加すると、MAFによって一意の要素識別子(id
)が生成され、自動的にMAF AMXページに挿入されます。これにより、同じページ内の類似したコンポーネントでもそれぞれを識別する、MAF AMXページ内の有効な識別子となります。
MAFは、次のことを行う識別子監査ユーティリティを提供しています。
MAF AMXページにおける識別子の存在と一意性を確認する。
識別子が存在しない場合または一意でない場合、要素の必須id
属性ごとにエラーが報告される。
自動修正により、識別子の問題が報告されると、要素の一意のid
が生成される。
「ソース」エディタと「構造」ペインの識別子エラー・レポートを、それぞれ図に示します。
id
に加え、監査ユーティリティでは「ポップアップ表示動作」操作のpopupId
およびalignId
属性がチェックされます(「ポップアップ・コンポーネントの使用方法」を参照)。
「ソース」エディタの「ポップアップ表示動作」の「ポップアップID」属性と「位置合せID」属性のエラー・レポートを、それぞれ図に示します。
詳細は、『Oracle JDeveloperによるアプリケーションの開発』のJavaプロジェクトの監査とモニタリングに関する項を参照してください。
MAF AMXページの作成後は、ページへのデータ・コントロールの追加を開始できます。
データ・コントロール要素を「データ・コントロール」ウィンドウからドラッグして「構造」ウィンドウまたは「ソース」エディタのいずれかにドロップすることで、MAF AMXビューでデータバインドされたUIコンポーネントを作成できます。「データ・コントロール」ウィンドウからこれらのいずれかの場所にアイテムをドラッグすると、ドロップしたアイテムに対して使用できるデフォルトのUIコンポーネントのポップアップ・メニューが表示されます。目的のUIコンポーネントを選択すると、そのコンポーネントがMAF AMXページに挿入されます。また、関連ページ定義ファイルにバインディング情報が作成されます。そのようなファイルが存在しない場合は、JDeveloperによって作成されます。MAFには、データ・コントロールのドロップ用のビジュアル・インジケータが用意されており、新しいデータ・コントロールの場所を知らせます。
注意:
データ・コントロールは、基礎となるXMLスキーマで許可された場所にのみドロップできます。
方法によっては、様々なタイプのデータ・コントロールをMAF AMXページの「構造」ウィンドウに挿入できます。
コレクションの属性をドロップすることにより、様々な入力および出力コンポーネントを作成できます。ページにデータ・コントロール操作をドロップすることにより、ボタンおよびリンク・コンポーネントも作成できます。
これらの各操作に対し、MAF AMXボタンにそれぞれのアクション・リスナーが追加されます。
データ・コントロールの属性および操作は、次の1つ以上のMAF AMX UIコンポーネントとしてドロップできます(「UIコンポーネントの作成と使用方法」を参照してください)。
ボタン
リンク
入力日
ラベル付入力日
入力テキスト
ラベル付入力テキスト
出力テキスト
ラベル付出力テキスト
イテレータ
リスト・アイテム
リスト・ビュー
ブール・チェック・ボックスの選択
ブール・スイッチの選択
ボタンを1つ選択
選択肢を1つ選択
ラジオ・ボタンを1つ選択
チェック・ボックスを複数選択
選択肢を複数選択
日時の変換
数値の変換
フォーム
読取り専用フォーム
パラメータ・フォーム
次の日付および数値タイプがサポートされています。
java.util.Date
java.sql.Timestamp
java.sql.Date
java.sql.Time
java.lang.Number
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
JDeveloperでの「データ・コントロール」ウィンドウの使用方法の詳細は、「「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成」を参照してください。
MAF AMXページにすでにパネル・フォーム・レイアウト・コンポーネントが含まれているか、すべてのフィールドを追加する必要がない場合は、データ・コントロールから個別の属性をドロップできます。属性タイプによって、次のように様々なデータ・バインディング・メニュー・オプションが提供されます。
このカテゴリは、MAF入力日およびラベル付MAF入力日のコントロールを作成するためのオプションを提供します。属性を「データ・コントロール」ウィンドウからMAF AMXページのソース・エディタまたは「構造」ウィンドウにドラッグすると表示される日付コントロールを追加するためのポップアップ・メニューを図に示します。
このカテゴリは、次のコントロールを作成するためのオプションを提供します。
MAFボタンを1つ選択
MAF選択肢を1つ選択
MAFラジオ・ボタンを1つ選択
MAFブール・チェックボックスの選択
MAFブール・スイッチの選択
属性を「データ・コントロール」ウィンドウからMAF AMXページの「ソース」エディタまたは「構造」ウィンドウにドラッグすると表示される選択コントロールを追加するためのポップアップ・メニューを図に示します。
既存のMAF AMXページを使用している場合、「MAFボタンを1つ選択」オプションまたは「MAF選択肢を1つ選択」オプションを選択すると、適切な「リスト・バインディングの編集」ダイアログが表示されます(図を参照)。新しいMAF AMXページにコントロールをドロップした場合には、かわりに「リスト・バインディングの編集」ダイアログが開かれます。「OK」をクリックすると、「リスト・バインディングの編集」が開かれます。
注意:
単一選択またはブール選択のコンポーネントとして任意のデータ・コントロール属性をドロップするたびに、それぞれ「リスト・バインディングの編集」または「Booleanバインディングの編集」ダイアログが表示されます。
図13-63 ボタンを1つ選択コントロールおよび選択肢を1つ選択コントロールの「リスト・バインディングの編集」ダイアログ
「MAFラジオ・ボタンを1つ選択」オプションを選択すると、図に示すように、別の「リスト・バインディングの編集」ダイアログが表示されます。
「MAFブール・チェックボックスの選択」オプションまたは「MAFブール・スイッチの選択」オプションを選択すると、図に示すように、別の「リスト・バインディングの編集」ダイアログが表示されます。
図13-65 ブール・チェック・ボックスおよびスイッチの選択コントロールの「リスト・バインディングの編集」ダイアログ
属性に加え、操作およびカスタム・メソッドもドラッグ・アンド・ドロップできます。操作やメソッドのタイプによって、次のように様々なデータ・バインディング・メニュー・オプションが提供されます。
データ・コントロール操作のカテゴリです。次のオプションがあります(図を参照)。
MAFボタン
MAFリンク
MAFパラメータ・フォーム
注意:
操作またはメソッドを、リスト・ビュー・コントロールの子としてドロップすると、ポップアップ・メニューは表示されず、リスト・アイテムが自動的に作成されます。これは、リスト・ビュー・コントロールの直接の子としてドロップできる有効なコントロールが他にないためです。生成されるリスト・アイテムに対して、JDeveloperにより次のようなバインディングが作成されます。
<amx:listItem actionListener="#{bindings.getLocation.execute}"/>
カスタム・メソッドのカテゴリです。次のオプションがあります。
MAFボタン
MAFリンク
MAFパラメータ・フォーム
「MAFパラメータ・フォーム」オプションでは、フォームに挿入するメソッドまたは操作の引数に加え、各引数に対してそれぞれのコントロールも選択できます(図を参照)。
「フォーム・フィールドの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。
<amx:panelFormLayout id="pfl1"> <amx:inputText id="it1" value="#{bindings.empId.inputValue}" label="#{bindings.empId.hints.label}" /> </amx:panelFormLayout> <amx:commandButton id="cb1" actionListener="#{bindings.ExecuteWithParams1.execute}" text="ExecuteWithParams1" disabled="#{!bindings.ExecuteWithParams1.enabled}"/>
生成されるバインディングの詳細は、「生成されるバインディングに関する必知事項」を参照してください。
次にMAFパラメータ・フォームでサポートされるコントロールのタイプを示します。
MAF入力日
ラベル付MAF入力日
MAF入力テキスト
ラベル付MAF入力テキスト
ラベル付MAF出力テキスト
MAF AMXページにコレクションをドラッグ・アンド・ドロップできます。コレクションのタイプによって、次のように様々なデータ・バインディング・メニュー・オプションが提供されます。
このカテゴリは、複数選択コントロールを作成するためのオプションを提供します。次のコントロールは、このカテゴリの下に作成できます。
MAFチェックボックスを複数選択
MAF選択肢を複数選択
作成するコントロールのタイプとして「MAF選択肢を複数選択」または「MAFチェックボックスを複数選択」のいずれかを選択すると、「リスト・バインディングの編集」ダイアログが表示されます。
このカテゴリは、MAF AMXパネル・フォーム・コントロールを作成するために使用されます。
次のコントロールは「フォーム」カテゴリの下に作成できます。
MAFフォーム
MAF読取り専用フォーム
作成するフォームのタイプとして「MAFフォーム」を選択すると、JDeveloperウィザードが起動され、ここで、フォームに挿入するフィールドに加え、各フィールドに対してそれぞれのコントロールも選択できます(図を参照)。
「フォーム・フィールドの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。
<amx:panelFormLayout id="pfl1"> <amx:panelLabelAndMessage id="plam1" label="#{bindings.jobId.hints.label}"> <amx:outputText id="ot1" value="#{bindings.jobId.inputValue}" /> </amx:panelLabelAndMessage> <amx:inputText id="it4" value="#{bindings.title.inputValue}" label="#{bindings.title.hints.label}" /> <amx:inputText id="it5" value="#{bindings.minSalary.inputValue}" simple="true" /> <amx:inputText id="it3" value="#{bindings.maxSalary.inputValue}" simple="true" /> </amx:panelFormLayout>
生成されるバインディングの詳細は、「生成されるバインディングに関する必知事項」を参照してください。
次にMAFフォームでサポートされるコントロールを示します。
MAF入力日
ラベル付MAF入力日
MAF入力テキスト
ラベル付MAF入力テキスト
ラベル付MAF出力テキスト
注意:
MAF出力テキストは、MAFスキーマで定義される有効なパネル・フォーム・レイアウトの子要素ではないため、サポートされていません。
作成するフォームのタイプとして「MAF読取り専用フォーム」を選択すると、JDeveloperウィザードが起動され、ここで、フォームに挿入するフィールドに加え、各フィールドに対してそれぞれのコントロールも選択できます(図を参照)。
「フォーム・フィールドの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。
<amx:panelFormLayout id="pfl1"> <amx:panelLabelAndMessage id="plam4" label="#{bindings.jobId.hints.label}"> <amx:outputText id="ot4" value="#{bindings.jobId.inputValue}" /> </amx:panelLabelAndMessage> <amx:panelLabelAndMessage id="plam1" label="#{bindings.title.hints.label}"> <amx:outputText id="ot1" value="#{bindings.title.inputValue}" /> </amx:panelLabelAndMessage> <amx:panelLabelAndMessage id="plam3" label="#{bindings.minSalary.hints.label}"> <amx:outputText id="ot3" value="#{bindings.minSalary.inputValue}" /> </amx:panelLabelAndMessage> <amx:panelLabelAndMessage id="plam2" label="#{bindings.maxSalary.hints.label}"> <amx:outputText id="ot2" value="#{bindings.maxSalary.inputValue}" /> </amx:panelLabelAndMessage> </amx:panelFormLayout>
生成されるバインディングの詳細は、「生成されるバインディングに関する必知事項」を参照してください。
MAF読取り専用フォームは、ラベル付MAF出力テキストのみをサポートします。
これは、子コンポーネントのあるMAF AMXイテレータを作成するためのオプションを提供します(図を参照)。
作成するコントロールのタイプとして「MAFイテレータ」を選択すると、JDeveloperウィザードが起動され、ここで、イテレータに挿入するフィールドに加え、各フィールドに対してそれぞれのコントロールも選択できます(図に示すように、デフォルトの選択は「ラベル付MAF出力テキスト」です)。
「イテレータの編集」ダイアログで適切なオプションを選択すると、次のデータ・バインディングが生成されます。
<amx:iterator id="i1" var="row" value="#{bindings.jobs.collectionModel}"> <amx:panelLabelAndMessage id="plam6" label="#{bindings.jobs.hints.jobId.label}"> <amx:outputText id="ot6" value="#{row.jobId}" /> </amx:panelLabelAndMessage> <amx:panelLabelAndMessage id="plam5" label="#{bindings.jobs.hints.title.label}"> <amx:outputText id="ot5" value="#{row.title}" /> </amx:panelLabelAndMessage> <amx:inputText id="it1" value="#{row.bindings.minSalary.inputValue}" label="#{bindings.jobs.hints.minSalary.label}" /> <amx:inputText id="it2" value="#{row.bindings.maxSalary.inputValue}" label="#{bindings.jobs.hints.maxSalary.label}" /> </amx:iterator>
生成されるバインディングの詳細は、「生成されるバインディングに関する必知事項」を参照してください。
次にイテレータの編集でサポートされるコントロールを示します。
MAF入力テキスト
ラベル付MAF入力テキスト
MAF出力テキスト
ラベル付MAF出力テキスト
これは、子コンポーネントのあるMAF AMXリスト・ビューを作成するためのオプションを提供します(図を参照)。
作成するコントロールのタイプとして「MAFリスト・ビュー」を選択すると、図に示すように、「ListViewギャラリ」が開かれ、リスト・ビューに特定のレイアウトを選択できます。
「ListViewギャラリ」に表示される、サポートされるリスト・フォーマットを表にリストします。
表13-5 リスト・フォーマット
フォーマット | 要素行の値 |
---|---|
シンプル |
|
メイン-サブ・テキスト |
|
開始-終了 |
|
四分円 |
|
選択したリスト・フォーマットの「ListViewギャラリ」に表示されている「バリエーション」(上の図を参照)は、区切りか先頭イメージのいずれかまたは両方を追加するためのオプションで構成されています。
先頭イメージのあるバリエーションを選択すると、イメージ行が「リスト・アイテム・コンテンツ」表(次の図を参照)に追加されます。
区切りのあるバリエーションを選択すると、「区切り属性」フィールドがデフォルト値の「区切りなし」ではなく、リスト内の最初の属性にデフォルトで設定され、「区切りモード」フィールドにそのデフォルト値の「すべて」が移入されます。
「ListViewギャラリ」に表示されている「スタイル」オプション(上の図を参照)では、シェブロンを抑制することも、凹枠スタイル・リストを使用することも、その両方を行うこともできます。
この選択によって、「リスト・ビューの編集」ダイアログ(次の図を参照)の状態は変更されません。影響するのは、生成されるMAF AMXマークアップのみです。
凹枠リストのあるスタイルを選択すると、生成されたMAF AMXマークアップのlistView
要素にadfmf-listView-insetList
スタイル・クラスが設定されます。
凹枠リストのある「シンプル」フォーマットの例を次に示します。
<amx:listView var="row" value="#{bindings.employees.collectionModel}" fetchSize="#{bindings.employees.rangeSize}" styleClass="adfmf-listView-insetList" showMoreStrategy="autoScroll" bufferStrategy="viewport" id="listView2"> <amx:listItem id="li2"> <amx:outputText value="#{row.employeename}" id="ot3"/> </amx:listItem> </amx:listView>
「ListViewギャラリ」の「説明」ペインは、現在選択されているバリエーションに基づいて更新されます。フォーマットには、メイン・スタイルの簡単な説明が示され、その後に選択したバリエーションの詳細が続きます。4つのリスト・フォーマットに、それぞれ4つのバリエーションがあり、次の表に示す16の固有の説明が提供されています。
表13-6 リスト・ビューのフォーマットとバリエーション
リスト・フォーマット | バリエーション | 説明 |
---|---|---|
シンプル |
基本 |
テキスト・フィールドは、リスト・アイテムの開始側に表示されます。 |
シンプル |
区切り |
テキスト・フィールドは、リスト・アイテムの開始側に、アイテムが区切りによりグループ化されて表示されます。 |
シンプル |
イメージ |
テキスト・フィールドは、リスト・アイテムの開始側に、先頭イメージに続いて表示されます。 |
シンプル |
区切りおよびイメージ |
テキスト・フィールドは、リスト・アイテムの開始側に、先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。 |
メイン-サブ・テキスト |
基本 |
目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に続きます。 |
メイン-サブ・テキスト |
区切り |
目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に続きます。リスト・アイテムは区切りによってグループ化されます。 |
メイン-サブ・テキスト |
イメージ |
目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に先頭イメージに続いて表示されます。 |
メイン-サブ・テキスト |
区切りおよびイメージ |
目立つメイン・テキスト・フィールドがリスト・アイテムの開始側に表示され、従属テキストがその下に先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。 |
開始-終了 |
基本 |
テキスト・フィールドは、リスト・アイテムの両側に表示されます。 |
開始-終了 |
区切り |
テキスト・フィールドは、リスト・アイテムの両側に、アイテムが区切りによりグループ化されて表示されます。 |
開始-終了 |
イメージ |
テキスト・フィールドは、リスト・アイテムの両側に、先頭イメージに続いて表示されます。 |
開始-終了 |
区切りおよびイメージ |
テキスト・フィールドは、リスト・アイテムの両側に、先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。 |
四分円 |
基本 |
テキスト・フィールドは、リスト・アイテムの四隅に表示されます。 |
四分円 |
区切り |
テキスト・フィールドは、リスト・アイテムの四隅に、アイテムが区切りによりグループ化されて表示されます。 |
四分円 |
イメージ |
テキスト・フィールドは、リスト・アイテムの四隅に、先頭イメージに続いて表示されます。 |
四分円 |
区切りおよびイメージ |
テキスト・フィールドは、リスト・アイテムの四隅に、先頭イメージに続いて表示されます。リスト・アイテムは区切りによってグループ化されます。 |
「ListViewギャラリ」で選択し、「OK」をクリックすると、「リスト・ビューの編集」ウィザードが起動されます。ここで、図に示すように、バインディング属性を選択したリスト・ビュー・フォーマットの要素にマップすることにより、リスト・アイテムのコンテンツを作成できます。
上の図に示すダイアログに入力する際は、次の点を考慮してください。
最初のイメージは、選択したリスト・ビュー・フォーマットのメイン・コンテンツ要素を反映し、略図から基礎となる表の名前付き要素へのマッピングを提供します。
「要素」列の読取り専用セルは、選択したリスト・ビュー・フォーマットから導出されます。
「値バインディング」列の編集可能セルは、ドロップされたデータ・コントロール・ノードに基づいています。
リスト・アイテムは、その特定要素に対してどちらが適切であるかによって、出力テキストまたはイメージ・コンポーネントのいずれかとして生成されます。
要素(行)数は選択したリスト・ビュー・フォーマットであらかじめ決まっているため、行を追加または削除することはできません。
要素の順序は変更できません。
「リスト・アイテム選択」は選択モードを示し、単一のアイテム選択(デフォルト)または選択なしのいずれかにできます。リスト・ビューのshowLinkIcon
属性は、選択モードに基づいて更新されます。選択モードが「なし」に設定されると、showLinkIcon
属性はfalse
に設定されます。それ以外の場合、showLinkIcon
属性は変更されません(たとえば、デフォルトのtrue
にデフォルト設定されます)。
listView
の次の属性を使用すると、選択モードの機能を有効にできます。
selectionListener
: 選択リスナーへのメソッド参照を定義します。
selectedRowKeys
: このコンポーネントの選択状態を示します。
「単一アイテム」オプションを選択した場合、「リスト・ビューの編集」ダイアログでは自動的にこれらの属性が次のように設定されます。
selectionListener
は"bindings.treebinding.collectionModel.makeCurrent"
に設定されます。
selectedRowKeys
は"bindings.treebinding.collectionModel.selectedRow"
に設定されます。
selectionListener
属性には「編集」オプションがあり、これを「プロパティ」ウィンドウから使用して、マネージドBeanクラスおよび適切なマネージドBeanメソッドを他のリスナー属性と同様の方法で作成できます(次の図を参照)。
次の例は、MAF AMXファイルでのlistView
要素の選択関連属性を示しています。「リスト・ビューの編集」ダイアログで「単一アイテム」を選択すると、この宣言が生成されます(図13-79を参照)。
<amx:listView id="listView1" var="row" value="#{bindings.employees.collectionModel}" fetchSize="#{bindings.employees.rangeSize}" showMoreStrategy="autoScroll" bufferStrategy="viewport" selectionListener= "#{bindings.employees.collectionModel.makeCurrent}" selectedRowKeys= "#{bindings.employees.collectionModel.selectedRow}"> <amx:listItem id="listItem1"> ... </amx:listItem> </amx:listView>
「リスト・ビューの編集」ダイアログで「リスト・アイテム選択」オプションとして「なし」を選択した場合、selectionListener
属性とselectedRowKeys
属性は、デフォルト値がなく、MAF AMXファイル内に出現しないため、設定されません。同時に、リスト・アイテムのshowLinkIcon
属性はfalse
に設定されます。次の例は、リスト・ビューの選択属性の省略を示しています。
<amx:listView id="listView1" var="row" value="#{bindings.employees.collectionModel}" fetchSize="#{bindings.employees.rangeSize}" showMoreStrategy="autoScroll" bufferStrategy="viewport"> <amx:listItem id="listItem1" showLinkIcon="false"> ... </amx:listItem> </amx:listView>
MAF AMXページとの間でナビゲーションが発生すると、リスト・ビューの選択状態が保持されます。
注意:
MAF AMXページ間で同じイテレータIDがある場合、選択されている行が考慮されます。たとえば、あるページに、イテレータがemployeesIterator
であるリスト・ビューとしてEmployees
コレクションをドラッグした後、「詳細」
ページを追加し、その「詳細」
ページの従業員イテレータのIDがemployeesIterator
に設定されている場合は、選択されている行のみが考慮されます。
「区切り属性」フィールドのデフォルト値は「区切りなし」であり、この場合、「区切りモード」フィールドは無効です。デフォルト以外の値を選択する場合は、次の図に示すように、「区切りモード」パラメータを指定する必要があります。
リスト・ビューの区切りの詳細は、「リスト・ビューおよびリスト・アイテム・コンポーネントの使用方法」を参照してください。
「リスト・ビューの編集」ダイアログで適切なオプションを選択すると、次のMAF AMXマークアップおよびデータ・バインディングが生成されます。
<amx:listView id="listView1" var="row" value="#{bindings.employees.collectionModel}" fetchSize="#{bindings.employees.rangeSize}" showMoreStrategy="autoScroll" bufferStrategy="viewport" dividerAttribute="key" dividerMode="firstLetter" selectionListener= "#{bindings.employees.collectionModel.makeCurrent}" selectedRowKeys= "#{bindings.employees.collectionModel.selectedRow}"> <amx:listItem id="listItem1" > <amx:outputText value="#{row.key}" styleClass="adfmf-listItem-subtext" id="outputText1"/> </amx:listItem> </amx:listView>
生成されるバインディングの詳細は、「生成されるバインディングに関する必知事項」を参照してください。
MAFリスト・ビューでサポートされるコントロールは次のとおりです。
MAF出力テキスト
MAFイメージ
コンポーネントがドロップされたときにMAF AMXページに追加されるサンプル・バインディングを表にリストします。
表13-7 サンプル・データ・バインディング
コンポーネント | データ・バインディング |
---|---|
ボタン |
<amx:commandButton id="commandButton1" actionListener="#{bindings.FindContacts.execute}" text="FindContacts" disabled="#{!bindings.FindContacts.enabled}"> </amx:commandButton> |
リンク |
<amx:commandLink id="commandLink1" actionListener="#{bindings.FindContacts.execute}" text="FindContacts" disabled="#{!bindings.FindContacts.enabled}"> </amx:commandLink> |
ラベル付入力日 |
<amx:inputDate id="inputDate1" value="#{bindings.timeStamp.inputValue}" label="#{bindings.timeStamp.hints.label}"> </amx:inputDate> |
入力日 |
<amx:inputDate id="inputDate1" value="#{bindings.timeStamp.inputValue}"> </amx:inputDate> |
ラベル付入力テキスト |
<amx:inputText id="inputText1" value="#{bindings.contactData.inputValue}" label="#{bindings.contactData.hints.label}"> </amx:inputText> |
入力テキスト |
<amx:inputText id="inputText1" value="#{bindings.contactData.inputValue}" simple="true"> </amx:inputText> |
出力テキスト |
<amx:outputText id="outputText1" value="#{bindings.contactData.inputValue}"> </amx:outputText> |
ラベル付出力テキスト |
<amx:panelLabelAndMessage id="panelLabelAndMessage1" label="#{bindings.contactData.hints.label}"> <amx:outputText id="outputText1" value="#{bindings.contactData.inputValue}"/> </amx:panelLabelAndMessage> |
ブール・チェック・ボックスの選択 |
<amx:selectBooleanCheckbox id="selectBooleanCheckbox1" value="#{bindings.contactData.inputValue}" label="#{bindings.contactData.label}"> </amx:selectBooleanCheckbox> |
ブール・スイッチの選択 |
<amx:selectBooleanSwitch id="selectBooleanSwitch" value="#{bindings.contactData.inputValue}" label="#{bindings.contactData.label}"> </amx:selectBooleanSwitch> |
ボタンを1つ選択 |
<amx:selectOneButton id="selectOneButton1" value="#{bindings.contactData.inputValue}" label="#{bindings.contactData.label}" required="#{bindings.contactData.hints.mandatory}"> <amx:selectItems value="#{bindings.contactData.items}"/> </amx:selectOneButton> |
選択肢を1つ選択 |
<amx:selectOneChoice id="selectOneChoice1" value="#{bindings.contactData.inputValue}" label="#{bindings.contactData.label}"> <amx:selectItems id="selectItems1" value="#{bindings.contactData.items}"/> </amx:selectOneChoice> |
チェック・ボックスを複数選択 |
<amx:selectManyCheckbox id="selectManyCheckbox1" value="#{bindings.AssetView.inputValue}" label="#{bindings.AssetView.label}"> <amx:selectItems id="selectItems1" value="#{bindings.AssetView.items}"/> </amx:selectManyCheckbox> |
ラジオ・ボタンを1つ選択 |
<amx:selectOneRadio id="selectOneRadio1" value="#{bindings.contactData.inputValue}" label="#{bindings.contactData.label}" <amx:selectItems id="selectItems1" value="#{bindings.contactData.items}"/> </amx:selectOneRadio> |
選択肢を複数選択 |
<amx:selectManyChoice id="selectManyChoice1" value="#{bindings.AssetView.inputValue}" label="#{bindings.AssetView.label}"> <amx:selectItems id="selectItems1" value="#{bindings.AssetView.items}"/> </amx:selectManyChoice> |
最初のドラッグ・アンド・ドロップ・イベントにより、次のディレクトリとファイルが生成されます。
ドラッグ・アンド・ドロップ時に生成されるDataBindings.cpx
ファイル例を図に示します。
DataBindings.cpx
ファイルでは、MAF AMXアプリケーション機能全体のバインディング・コンテキストが定義され、実行時にはこのメタデータから、バインディング・オブジェクトが作成されます。コンポーネントがプロジェクトの外部で作成された後にインポートされた場合は、MAF AMXアプリケーション機能に2つ以上のDataBindings.cpx
ファイルが存在する可能性があります。これらのファイルは個々のMAF AMXページをページ定義ファイルにマップし、どのデータ・コントロールをMAF AMXアプリケーション機能で使用するかを宣言します。実行時には、DataBindings.cpx
ファイルにリストされたデータ・コントロールのみが、現在のMAF AMXアプリケーション機能で使用可能になります。
初めて「データ・コントロール」ウィンドウを使用してコンポーネントをページに追加した場合、または操作をアクティビティに追加した場合、JDeveloperによって自動的に、ViewControllerプロジェクトのデフォルト・パッケージ内にDataBindings.cpx
ファイルが作成されます。DataBindings.cpx
ファイルが作成されると、最初のページまたはタスク・フロー・アクティビティ用のエントリが自動的に追加されます。その後、「データ・コントロール」ウィンドウを使用するたびに、そのページまたはアクティビティ用のエントリがまだない場合は、エントリがDataBindings.cpx
に追加されます。
JDeveloperによりDataBindings.cpx
ファイルが作成されると、そのファイルを「ソース」ビュー(上の図を参照)または概要エディタで開くことができます。
ファイルの「ページ・マッピング」(pageMap
)セクションにより、IDを使用して各MAF AMXページまたはタスク・フロー・アクティビティが対応するページ定義ファイルにマップされます。「ページ定義の使用方法」(pageDefinitionUsages
)セクションにより、ページ定義IDはMAF AMXアプリケーション機能内のページ定義ファイルの絶対パスにマップされます。「データ・コントロールの使用方法」(dataControlUsages
)セクションは、ページ定義ファイル内で定義済のバインディング・オブジェクトによって使用されるデータ・コントロールを識別します。これらのマッピングにより、ページの起動時にバインディング・コンテナを初期化できます。
概要エディタで、現在のID名をダブルクリックし、インラインで編集することで、ページ定義ファイルまたはデータ・コントロールのID名を変更できます。そうすることで、MAF AMXアプリケーション機能のすべての参照が更新されます。ただし、JDeveloperで更新されるのはID名のみであり、ファイル名は更新されません。データ・コントロール名を予約語に変更しないようにしてください。
また、「構造」ウィンドウでDataBindings.cpx
ファイルの要素をクリックし、「プロパティ」ウィンドウを使用してプロパティ値を変更することもできます。
ドラッグ・アンド・ドロップ時に生成されるPageDef
ファイル例を図に示します。
ページ定義ファイルでは、実行時にMAF AMX UIコンポーネントにデータを移入するバインディング・オブジェクトを定義します。バインディングを持つすべてのMAF AMXページには、そのページで使用するバインディング・オブジェクトの定義が含まれる、対応するページ定義ファイルが必要です。ページ定義ファイルによって、すべてのバインディングに設計時アクセスが提供されます。実行時には、ページ定義ファイルによって定義されたバインディング・オブジェクトが、ページ定義ファイルの実行時インスタンスであるバインディング・コンテナ内でインスタンス化されます。
初めて「データ・コントロール」ウィンドウを使用してページにコンポーネントを追加すると、JDeveloperによって自動的に、そのページのページ定義ファイルが作成され、コンポーネントにより参照される各バインディング・オブジェクトの定義が追加されます。それ以降、ページにデータバインド・コンポーネントを追加するたびに、JDeveloperによって、必要なバインディング・オブジェクト定義がページ定義ファイルに自動的に追加されます。
デフォルトでは、ページ定義ファイルは、「ViewController」プロジェクトのApplication Sourcesノードにあるmobile.PageDefs
パッケージに含まれています。対応するMAF AMXページがデフォルト以外のディレクトリ、またはデフォルトのサブディレクトリに保存されると、ページ定義も同じ名前のペッケージに保存されます。
ページ定義ファイルを開く方法の詳細は、「ページ定義ファイルへのアクセス」を参照してください。概要エディタでページ定義ファイルを開いた場合は、次のタブを使用して、バインディング、コンテキスト・イベントおよびMAF AMXページのパラメータを表示および構成できます。
バインディングと実行可能ファイル: このタブには、3種類のオブジェクト(バインディング、実行可能ファイル、および関連付けられたデータ・コントロール)が表示されます。
注意:
BindingsとExecutablesは、選択しないかぎりデータ・コントロールには表示されません。
デフォルトでは、モデル・バインディング・オブジェクトは、そのオブジェクトを作成するために使用されたデータ・コントロール・オブジェクトの名前が付けられます。データ・コントロール・オブジェクトが1ページ内で何度も使用される場合、JDeveloperではデフォルトのバインディング・オブジェクト名に数字を追加して、それぞれが一意になるようにします。
コンテキスト・イベント: MAF AMXアプリケーション機能内のアーティファクトが登録可能なコンテキスト・イベントを作成できます。
パラメータ: パラメータ・バインディング・オブジェクトは、リクエストの開始時にページが評価するパラメータを宣言します。静的値または静的値を割り当てるEL式を使用して、ページ定義ファイルのパラメータ値を定義できます。
概要エディタの項目(または「構造」ウィンドウの関連付けられたノード)をクリックすると、「プロパティ」ウィンドウを使用してその項目の属性値を表示および編集したり、「ソース」タブをクリックしてXMLソースを直接編集できます。
JDeveloperの「バインディング」タブ(図を参照)は、MAF AMXエディタで使用可能です。ここには、特定のMAF AMXページに対して定義されたデータ・バインディングが表示されます。バインディングを選択すると、基盤となるデータ・コントロールへのリレーションシップが示され、PageDef
ファイルへのリンクが提供されます。
「構造」ウィンドウからMAF AMXコンポーネントを削除または切り取ると、使用されないバインディングは自動的にページから削除されます。
注意:
「ソース」エディタからコンポーネントを削除した場合には、バインディングは削除されません。
バインディングを参照するリスト・ビュー・コンポーネントの削除を図に示します。削除すると、関連するバインディング・エントリが、対応するPageDef.xml
ファイルから自動的に削除されます。
図では、ページからリスト・ビュー・コンポーネントを切り取ることにより、これを削除しています。
「切取り」をクリックすると、図に示すように、「バインディングの削除の確認」ダイアログが表示され、該当するバインディングを削除するかどうかを選択するよう求められます。