58 Contributorインタフェース・フレームワークおよびUIコントローラの理解

Oracle WebCenter Sites: Contributorインタフェース・フレームワークでは、特にUIコントローラによってすべてのインタフェース・リクエストが処理され、エレメントが処理されます。

トピック:

Contributorインタフェース・フレームワークについて

Contributorインタフェースのフレームワークは、サービス・レイヤーの上位にあり、クライアント・リクエストを処理します。

この図は、プレゼンテーション・レイヤーとUIコントローラで構成されたフレームワークを示しています。

図58-1 Contributorインタフェース・フレームワーク

図58-1の説明が続きます
「図58-1 Contributorインタフェース・フレームワーク」の説明

プレゼンテーション・レイヤーは、ビューをレンダリングするエレメントとレスポンスを生成するエレメントで構成されます。「UIコントローラ」で説明するように、UIコントローラは、Contributorインタフェースから受信したリクエストを処理します。

ノート:

アセット・フォームContributorフレームワークの外部に存在する場合、UIコントローラはアセット・フォーム関連のリクエストの処理には使用されません。「Contributorインタフェースのアセット・フォームのカスタマイズ」を参照してください。

UIコントローラ

UIコントローラは、構成、アクションおよびプレゼンテーション・フェーズのリクエストを処理します。各フェーズで、対応するエレメントがネーミング規則によって決定されます。UIコントローラがカスタム・エレメントをチェックするプロセスがあります。

トピック:

UIコントローラでリクエストを処理する方法

UIコントローラに到達するには、fatwire/ui/controller SiteCatalogエントリを呼び出します。UIコントローラは、受信リクエストに対して少なくとも1つのパラメータ(elementName)の提供を求めます。このパラメータは、実行されるコントローラ・エレメントを決定します。たとえば、次のURLはコントローラ・エレメントFoo/Barを呼び出します。

http://localhost:7001/sites/ContentServer?pagename=fatwire/ui/controller/controller&elementName=Foo/Bar

コントローラ・エレメントは、次の3つのフェーズで処理されます。

  1. 構成フェーズ

  2. アクション・フェーズ

  3. プレゼンテーション・フェーズ

各フェーズでは、個別のエレメントが実行されます。各フェーズの対応するエレメント名は、次で説明するように、ネーミング規則によって決定されます。

ノート:

コントローラ・エレメントは、UIコントローラから呼び出すことができるエレメントです。

各フェーズで、UIコントローラはまず、そのフェーズに固有のカスタム・エレメントのテストを行います。このプロセス・フローについては、「エレメント・リクエストを処理するUIコントローラ: 例」のステップを参照してください。

1.構成フェーズ

このフェーズは、構成エレメントの評価からなります。構成エレメントには、呼び出されたコントローラ・エレメントによって使用される構成設定が含まれます。期待されるエレメント名は、<controllerElementName>Configです。<controllerElementName>は、elementNameパラメータの値です。たとえば、この例では、コントローラ・エレメント名がFoo/Barであるため、構成エレメントの期待される名前はFoo/BarConfigです。

構成フェーズは、Apache Commons構成に基づいており、構成データを有効なXMLとして書式設定する必要があります。たとえば:

<myconfig>
   <foo>123</foo>
   <bar>foobar</bar>
</myconfig>

XML構成データは、構成オブジェクトとして評価されます。つまり、XMLルート・エレメントの名前によって特定されてリクエスト範囲内で保持される、org.apache.commons.configuration.beanutils.ConfigurationDynaBeanのインスタンスとして評価されます。この例では、構成オブジェクトは、次のようにアクション・フェーズまたはプレゼンテーション・フェーズでアクセスできます。

ConfigurationDynaBean configBean = (ConfigurationDynaBean)request.getAttribute("myconfig");

ここで、myconfigは、構成エレメントの最上位レベルのXMLエレメントの名前になります。Apache Commons構成の詳細は、http://commons.apache.org/configurationで取得できます。

ノート:

構成フェーズの構成エレメントについて:

  1. 構成フェーズは条件付きです。エレメント<controllerElementName>Configが存在しない場合、UIコントローラはこのフェーズをスキップして、構成オブジェクトを作成することなく、次のフェーズに移動します。

  2. 他の2つのフェーズとは異なり、構成エレメントは、(たとえば、ics.callElementを使用して)直接評価されません。かわりに、ics.ReadPage()を使用して、fatwire/ui/controller/readConfiguration SiteCatalogエントリから呼び出されます(これにより、その出力を取得できる)。

  3. 構成オブジェクトの作成中に、コントローラは、CustomElementsの下のリクエストされたエレメントに対して、使用可能なカスタム構成があるかどうかをチェックします。カスタム構成がある場合、デフォルトでは、カスタム構成が対応するシステム構成とマージされます。これはデフォルトの動作です。カスタム構成をシステム構成とマージしない場合は、カスタム構成エレメントのElementCatalogエントリのフィールドresdetails1またはresdetails2に対してmerge=falseを指定します。

    たとえば、システム構成

    <myconfig>
       <foo>123</foo>
       <bar>foobar</bar>
    </myconfig>
    

    と、カスタム構成

    <myconfig>
       <foo1>456</foo1>
       <bar1>foo1bar1<bar1>
    </myconfig>
    

    が存在する場合、コントローラは、システム構成とカスタム構成を次のようにマージします。

    <myconfig>
       <foo>123</foo>
       <bar>foobar</bar>
       <foo1>456</foo1>
       <bar1>foo1bar1</bar1>
    </myconfig>

2.アクション・フェーズ

このフェーズでは、UIコントローラはアクション・エレメントを評価します。アクション・エレメントの期待される名前は、<controllerElementName>Actionです。この例では、アクション・エレメント名はFoo/BarActionです。

アクション・エレメントは、任意のビジネス・ロジックを含みます。通常は、次のフェーズで消費されるように、リクエスト範囲内のJavaオブジェクトを構築します。

ノート:

アクション・フェーズは条件付きです。エレメント<controllerElementName>Actionが存在しない場合、UIコントローラはこのフェーズをスキップして、プレゼンテーション・フェーズに移動します。

3.プレゼンテーション・フェーズ

この最後のフェーズでは、UIコントローラは、生成された出力のコンテンツ・タイプによって名前が異なるプレゼンテーション・エレメントを評価します。UIコントローラは、HTML(デフォルト動作)またはJSONのいずれかを処理できます。つまり、エレメント名は、<controllerElementName>Htmlまたは<controllerElementName>Jsonになります。

この例では、UIコントローラは、Foo/BarHtmlを評価しようとします。HTMLがデフォルトのコンテンツ・タイプであるからです。かわりにJSONデータを生成するには、次のようにレスポンス・タイプを明示的に指定する必要があります。

http://localhost:7001/sites/ContentServer?pagename=fatwire/ui/controller/controller&elementName=Foo/Bar&responseType=json

この場合、UIコントローラは、Foo/BarJsonというプレゼンテーション・エレメントを評価しようとします。

エレメント・リクエストを処理するUIコントローラ: 例

UIコントローラがエレメント・リクエストを処理する場合、次のようにカスタム・エレメントをテストします。

各フェーズ(構成、アクションおよびプレゼンテーション)で、UIコントローラはまず、そのフェーズに固有のカスタム・エレメントを検索します。カスタム・エレメントが見つからない場合、UIコントローラはデフォルトのエレメントを検索します。デフォルトのエレメントが見つからない場合、UIコントローラはそのフェーズをスキップして、次のフェーズに移動します。

次のステップでは、UIコントローラがエレメント・リクエストを処理する方法を、例をあげて説明しています。この例では、リクエストはUI/Layout/LeftNavigationという名前の既存のエレメントに対するもので、レスポンス・タイプはHtmlです。

  1. 構成フェーズ。UIコントローラは、LeftNavigationエレメントの構成を検索します。つまり、UIコントローラは、CustomElements (ElementCatalog内にある)の下のLeftNavigationConfig.jspという名前のエレメントを検索します。エレメントが存在する場合、UIコントローラはこのエレメントを読み取ります。存在しない場合は、デフォルトのエレメントLeftNavigationConfig.jsp (UI/Layout/内にある)を読み取ります。UIコントローラは構成オブジェクトを生成し、このオブジェクトをリクエスト範囲内で保持します。

    別の方法は、UIコントローラ・コールに引数として構成ファイル名を渡すことです。渡されたパラメータには、configNameという名前が付けられます。configNameが渡されると、UIコントローラは、そのパラメータで指定されたエレメントを検索します。

  2. アクション・フェーズ。UIコントローラは、エレメントLeftNavigationAction.jspを検索します。CustomElementsの下でエレメントを見つけると、UIコントローラはこのエレメントを実行します。そうでない場合は、デフォルトのLeftNavigationAction.jspエレメント(UI/Layout/内にある)を実行します。

  3. プレゼンテーション・フェーズ。この例のレスポンス・タイプはHtmlです。つまり、UIコントローラはエレメントLeftNavigationHtml.jspを検索します。CustomElementsの下でエレメントを見つけると、UIコントローラはこのエレメントを実行して、Htmlレスポンスを生成します。そうでない場合は、デフォルトのLeftNavigationHtml.jspエレメント(UI/Layout/内にある)を実行します。

カスタム・エレメント

Contributorインタフェースをカスタマイズする場合、必ずカスタム・エレメントを推奨された場所に格納してください。UIコントローラによってカスタム・エレメントが検索される方法を確認してください。

トピック:

エレメント・ストレージ

Contributorインタフェースのフレームワークにより、開発者はベスト・プラクティスに従って、カスタム・エレメントをシステムのデフォルト・エレメントから切り離しておくことができます。

ノート:

システムのデフォルト構成を変更しないことをお薦めします。かわりに、独自のカスタム・エレメントを作成して、ElementCatalogのCustomElementsの下に保存することで、アップグレード時でも保持されるようにします。

カスタム・エレメントへのパスは、そのエレメントがグローバル、サイト固有、サイト固有およびアセット・タイプ固有、またはアセット・タイプ固有であるかどうかによって異なります。この図は、カスタム・エレメントへのパスを示しています。

図58-2 カスタム・エレメントへのパス

図58-2の説明が続きます
「図58-2 カスタム・エレメントへのパス」の説明

UIコントローラでエレメントを検索する方法

UIコントローラがエレメントを検索する場合

  1. UIコントローラは、まず、次の順序でCustomElementsの下にあるすべてのパスを横断することによって、エレメントのカスタマイズされたバージョンを検索します。

    1. サイト固有およびアセット・タイプ固有のパス

    2. アセット・タイプ固有のパス

    3. サイト固有のパス

    4. グローバル・パス

    (パスの例として、図58-2を参照してください。)

  2. カスタム・エレメントが見つからない場合、UIコントローラはシステム定義のエレメントを使用します。

ノート:

UIコントローラがアセット・タイプ固有のエレメントを使用する場合、assetTypeParamパラメータの値として有効なアセット・タイプを指定してから、そのパラメータを渡す必要があります。

エレメントの命名規則

WebCenter Sitesでパッケージ化されたシステム定義のエレメントまたはサンプル・エレメントを参照している場合、このガイドでは、そのエレメントへのフル・パスが提供されます。フル・パスは常にUI/Layout/で始まります。たとえば、このガイドでは、システム定義エレメントDashBoardContentsConfig.jspは、次のように表示されます。

UI/Layout/CenterPane/DashBoardContentsConfig

作成するカスタム定義のエレメントを参照する場合、パスが不明であるため、このガイドでは、エレメント(JSP)の名前のみが提供されます。たとえば:

DashBoardContentsConfig.jsp

カスタム・エレメントは、CustomElementsの下に保存されているものと想定されます。