Contributorインタフェース・フレームワークおよびUIコントローラの詳細は、次の項を参照してください。
Contributorインタフェースのフレームワークは、サービス・レイヤーの上位にあり、クライアント・リクエストを処理します。図68-1に、プレゼンテーション・レイヤーとUIコントローラで構成されたフレームワークを示します。
プレゼンテーション・レイヤーは、ビューをレンダリングするエレメントとレスポンスを生成するエレメントで構成されます。「UIコントローラ」で説明するように、UIコントローラは、Contributorインタフェースから受信したリクエストを処理します。
注意:
アセット・フォームContributorフレームワークの外部に存在する場合、UIコントローラはアセット・フォーム関連のリクエストの処理には使用されません。アセット・フォームの詳細は、「Contributorインタフェースのアセット・フォームのカスタマイズ」を参照してください。
図68-1に示されているUIコントローラは、Contributorインタフェースから受信したリクエストを処理します。この項では、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つのフェーズで処理されます。
構成フェーズ
アクション・フェーズ
プレゼンテーション・フェーズ
各フェーズでは、個別のエレメントが実行されます。各フェーズの対応するエレメント名は、次で説明するように、ネーミング規則によって決定されます。
注意:
コントローラ・エレメントは、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で取得できます。
注意:
構成フェーズの構成エレメントについて:
構成フェーズは条件付きです。エレメント<controllerElementName>Configが存在しない場合、UIコントローラはこのフェーズをスキップして、構成オブジェクトを作成することなく、次のフェーズに移動します。
他の2つのフェーズとは異なり、構成エレメントは、(たとえば、ics.callElementを使用して)直接評価されません。かわりに、ics.ReadPage()を使用して、fatwire/ui/controller/readConfiguration SiteCatalogエントリから呼び出されます(これにより、その出力を取得できる)。
構成オブジェクトの作成中に、コントローラは、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です。
構成フェーズ。UIコントローラは、LeftNavigationエレメントの構成を検索します。つまり、UIコントローラは、CustomElements (ElementCatalog内にある)の下のLeftNavigationConfig.jspという名前のエレメントを検索します。エレメントが存在する場合、UIコントローラはこのエレメントを読み取ります。存在しない場合は、デフォルトのエレメントLeftNavigationConfig.jsp (UI/Layout/内にある)を読み取ります。UIコントローラは構成オブジェクトを生成し、このオブジェクトをリクエスト範囲内で保持します。
別の方法は、UIコントローラ・コールに引数として構成ファイル名を渡すことです。渡されたパラメータには、configNameという名前が付けられます。configNameが渡されると、UIコントローラは、そのパラメータで指定されたエレメントを検索します。
アクション・フェーズ。UIコントローラは、エレメントLeftNavigationAction.jspを検索します。CustomElementsの下でエレメントを見つけると、UIコントローラはこのエレメントを実行します。そうでない場合は、デフォルトのLeftNavigationAction.jspエレメント(UI/Layout/内にある)を実行します。
プレゼンテーション・フェーズ。この例のレスポンス・タイプはHtmlです。つまり、UIコントローラはエレメントLeftNavigationHtml.jspを検索します。CustomElementsの下でエレメントを見つけると、UIコントローラはこのエレメントを実行して、Htmlレスポンスを生成します。そうでない場合は、デフォルトのLeftNavigationHtml.jspエレメント(UI/Layout/内にある)を実行します。
Contributorインタフェースをカスタマイズする場合、この項の説明に従って、推奨される場所にカスタム・エレメントを保存します。UIコントローラがそれらのエレメントをどのように検索するかを十分に理解しておいてください。
この項には次のトピックが含まれます:
Contributorインタフェースのフレームワークにより、開発者はベスト・プラクティスに従って、カスタム・エレメントをシステムのデフォルト・エレメントから切り離しておくことができます。
注意:
システムのデフォルト構成を変更しないことをお薦めします。かわりに、独自のカスタム・エレメントを作成して、ElementCatalogのCustomElementsの下に保存することで、アップグレード時でも保持されるようにします。
カスタム・エレメントへのパスは、そのエレメントがグローバル、サイト固有、サイト固有およびアセット・タイプ固有、またはアセット・タイプ固有であるかどうかによって異なります。図68-2に、カスタム・エレメントへのパスを示します。
UIコントローラがエレメントを検索する場合
UIコントローラは、まず、次の順序でCustomElementsの下にあるすべてのパスを横断することによって、エレメントのカスタマイズされたバージョンを検索します。
サイト固有およびアセット・タイプ固有のパス
アセット・タイプ固有のパス
サイト固有のパス
グローバル・パス
(パスの例として、図68-2 を参照してください。)
カスタム・エレメントが見つからない場合、UIコントローラはシステム定義のエレメントを使用します。
注意:
UIコントローラがアセット・タイプ固有のエレメントを使用する場合、assetTypeParamパラメータの値として有効なアセット・タイプを指定してから、そのパラメータを渡す必要があります。
WebCenter Sitesでパッケージ化されたシステム定義のエレメントまたはサンプル・エレメントを参照している場合、このガイドでは、そのエレメントへのフル・パスが提供されます。フル・パスは常にUI/Layout/で始まります。たとえば、このガイドでは、システム定義エレメントDashBoardContentsConfig.jspは、次のように表示されます。
UI/Layout/CenterPane/DashBoardContentsConfig
作成するカスタム定義のエレメントを参照する場合、パスが不明であるため、このガイドでは、エレメント(JSP)の名前のみが提供されます。次に例を示します。
DashBoardContentsConfig.jsp
カスタム・エレメントは、CustomElementsの下に保存されているものと想定されます。