プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Sitesでの開発
12c (12.2.1.2.0)
E82734-02
目次へ移動
目次

前
次

13 MVCフレークワークおよびAPIを使用したWebsサイト開発

Oracle WebCenter Sitesでは、サーバー側Webサイトの開発用のモデル・ビュー・コントローラ(MVC)フレームワークとJava API、およびクライアント側でレンダリングされるWebサイトの構築用REST APIが用意されています。これらのテクノロジにより、柔軟かつ拡張可能なWebサイトを開発できます。

トピック:

13.1 サーバー側およびクライアント側の開発方法

Oracle WebCenter Sitesでは、Webページのコンテンツのサーバー側のレンダリング、クライアント側のレンダリング、あるいはその両方の組合せを構築するためのツールが用意されています。各方法には、Webサイト・デザインおよびレンダリングするコンテンツに応じて独自の利点があります。どちらの方法でも、迅速で生産的な開発用に、使いやすく標準化および準拠した方法で、Webサイトを試作および開発できます。

  • サーバー側モデル・ビュー・コントローラ(MVC)フレームワークは、サーバー側の堅牢なスクリプト作成をサポートするために、プレゼンテーションとビジネス・ロジックを明確に分離します。

    Java開発者は、Groovyを使用してControllerでビジネス・ロジック・コードを記述し、JSPでTemplatesを記述できますが、Web開発者は、HTMLおよびJavaScriptを使用して、互いの作業を干渉することなく、プレゼンテーション・エレメントをビューに作成できます。このMVCフレームワークは、WebCenter Sitesキャッシング、アセット依存性、およびライフサイクル管理の機能と完全に統合されます。

    コーディングを効率化するために、フレームワークには、簡素化されたサーバー・サイトJava APIが含まれています。デフォルトのJava APIには、次のタスクなど、Webサイトの構築の一般的なアクティビティの便利なインタフェースが提供されます。

    • アセット・データを読み取る

    • ページのブレッドクラムをペイントする

    • フォーム値にアクセスする

    • 検証を実行する

    • ControllerをRESTエンドポイントとして使用する

    サーバー側Java APIを参照してください。

    注意:

    「タグ・テクノロジを使用したWebサイト開発」に説明されているように、Java APIとMVCフレームワークの組合せにより、エレメントおよびテンプレートのWebCenter Sites JSPタグ・テクノロジが置き換わります。ただし、WebCenter Sitesタグは引き続きサポートされます。

  • REST APIでは、ブラウザ・クライアントで完全に実行されるテクノロジを使用して、クライアント側でレンダリングされるWebサイトを構築できます。このようなWebサイトには、単一ページ・アプリケーションが含まれますが、これに限定されるわけではありません。

    WebCenter Sites REST API機能を示すスタンドアロンのサンプルWebサイトは、ダウンロードしたWebCenter Sitesインストールの一部として付属しています。このサンプル・リファレンスの実装方法は、wcsitesディレクトリの指示を参照してください。

    クライアント側Webサイトのレンダリングは、高度にインタラクティブなアプリケーション(またはWebサイトの各部分)およびモバイル・サイトで特に便利です。クライアント側のレンダリングでは、一般にクライアント側ライブラリへのマークアップ生成が低下しますが、クライアントとサーバー間の相互作用をデータ要素のみに制限することで、通常はJSONの形式(JavaScript Object Notation)になります。このようなWebサイトでユーザーがページ間を移動すると、特定のデータ・コンポーネントのリクエストがサーバー送信され、マークアップを生成するためのJavaScriptがブラウザにロードされたままになります。

    REST APIは、データ・コンポーネントをJSON形式でクライアントに効率的に送信します。これらのAPIは、一般にサーバー側Java APIの機能と似ています。特に重要な点は、これらのサーバーには、集計など、クライアント側のレンダリングの特定のニーズに合せて追加の機能があることです。

    REST APIでは、次のような一般的な使用パターンに対応します。

    • ナビゲーション・データへのアクセス

    • 集計されたアセット・データへのアクセス

      たとえば、APIで特定のフィールドの除外、ワイルドカードの使用、またはリストの構築が可能です。

    Webサイトへの訪問者のニーズに応じて、完全にサーバー側の方法を使用して構築するか、クライアント側の方法を使用して構築するかを決定します。または、両方の方法を混在させることも可能です。サーバー側でレンダリングされるページへのコントリビュータは、Oracle WebCenter Sites: Contributorインタフェースを使用して、それらをWebモードで構成できますが、クライアント側でレンダリングされるページのエレメントにWebモード編集を使用することはできません。

    REST APIを参照してください。

13.2 サーバー側MVCフレームワーク

MVCデザイン・パターンでは、モデル、ビューおよびコントローラを分離します。モデルはデータを表し、ビューはプレゼンテーションを表し、コントローラはモデルとビューをリンクします。明確に分離することで、コードが読みやすく容易に変更できるようになり、技術の変化に対応するのも容易になります。

  • モデルはデータを表します。

    WebCenter Sitesでは、モデルはキーと値のペアのマップです。ビジネス・ロジックで決定されるアセット・データおよび任意のデータは、モデルの一部になります。

  • ビューはプレゼンテーションを表します。

    WebCenter Sitesでは、ビューは、ブラウザにレンダリングされるTemplateオブジェクトまたはSiteEntryオブジェクトになります。ビューには、ビジネス・ロジックが含まれず、ユーザーがデータを表示および変更するインタフェースで、モデルデータをレンダリングします。また、ユーザー・アクション(訪問者のクリック操作など)をControllerに送信します。

  • Controllerは、モデルおよびビューをリンクします。基礎となるデータでビジネス・ロジックを実行すると、ビューで使用できるようにControllerがモデルを集約します。

    WebCenter Sitesでは、Controllerは標準のアセット・インスタンスです。プレゼンテーション・アセット(TemplateまたはSiteEntryアセット・タイプ)は、Controllerにリンクできます。このリンクはオプションです。存在する場合、ビューを起動する前に、リンクされたControllerWebCenter Sitesによって起動されます。アセット・タイプと同様、タイプControllerのアセットは承認およびパブリッシュ可能です。

    Controllersでは、他のControllersの拡張およびインポートが可能です。BaseControllerでは、便利なアクセッサやデバッガなどが提供されます。さらに、「サーバー側Java API」で説明されているように、Java APIをControllerで使用できます。

    ControllerをRESTエンドポイントとして使用する方法は、「開発者のサンプルWebサイトに移動し、高度なトピック・メニューから「RESTエンドポイント」を選択します。

注意:

ビュー(TemplateまたはSiteEntryアセット)がControllerに関連付けられていない場合、WebCenter Sitesはそれをスタンドアロン・ビューとして扱います。このようなビューは、「Asset APIの使用: チュートリアル」で説明されているように、WebCenter Sitesのレガシー・ビュー・ベースのレンダリングにフォールバックします。WebCenter Sitesは、下位互換性を完全に維持しているため、MVCフレームワークへの増分的な遷移のオプションが可能です。

注意:

Controllerが別のControllerを拡張およびインポートする場合、拡張された側のControllerを編集しても、デフォルトでは、拡張する側のControllerのキャッシュは無効化されません。拡張する側のControllerまたはControllersのキャッシュを無効化するには、拡張する側の各ControllerをAdminインタフェースから編集または保存するか、「システム・ツール」の「コントローラ・アセット・ユーティリティ」を使用して、依存するすべてのControllersを強制的にコンパイルします。

次の各項では、サーバー側MVCフレームワークの各部分について説明します。

13.2.1 開発者のサンプルWebサイト

開発者のサンプルWebサイトでは、新しいMVCフレームワークの概要、開始例、サーバー側Java APIの例、注釈、グラマーの選択、カスタムBean、フォーム検証、RESTエンドポイント、フラグメント、ウォッチャなどの高度なトピックが表示されます。

この参照Webサイトは、Contributorインタフェースのサンプル・サイトに基づいています。

開発者のサンプルWebサイトにアクセスするには、インストールのホスト名とポート番号とともに、次のURLを入力します。

http://hostname:port/sites/samples/overview

13.2.2 WebCenter Sites MVCフレームワークの概要

この図は、リクエストの構造(MVCフレームワーク経由でリクエストが渡され、レスポンスを生成)を示しています。

図13-1 サーバー側のレンダリングのためのMVCフレームワーク・プロセス

図13-1の説明が続きます
「図13-1 サーバー側のレンダリングのためのMVCフレームワーク・プロセス」の説明

WebCenter Sitesでは、MVCフレームワークにはフロントControllerが含まれます。Oracle WebCenter Content ServerまたはSatellite Serverサーブレットは、フロントControllerとして機能し、様々なディスパッチおよびキャッシュ・サービスを処理します。

クライアントからのリクエストがフロントControllerに到達すると、リクエストURLに応じて、リクエストのビジネス・ロジックが含まれるTemplateに関連付けられている実際のControllerインスタンスを解決します。フロントControllerは、最初にビュー・エレメント(例: Templateアセット)を特定してから、ビューに関連付けられているControllerインスタンスを検索します(TemplateControllerにリンクされている場合)。

ページのビジネス・ロジックが含まれるControllerインスタンスが検出されると、フロントControllerがそれを実行します。Controllerが実行されると、モデル・インスタンスが作成されます。

その後、モデル・インスタンスをリクエスト・スコープに配置して、フロントControllerがリクエストをビューにディスパッチします。ビュー(JSP)は、JSTLタグを使用してモデル・インスタンスにアクセスし、それに応じてブラウザに表示できるようになります。

ページレット(Webページの部分)で同じプロセスが繰り返されます。Controllerオブジェクトが含まれるページレットは、多くのページ間で再利用可能なコンポーネントになります。

WebCenter Sitesは、WebページやページレットをWebCenter Sitesのキャッシュに格納したり、それらのキャッシュを保持して、Webサイトの訪問者に古いページが表示されないようにするなど、コンテンツを管理するだけでなく、多くの有用なタスクを管理者のかわりに処理します。これらはWebCenter Sites Javaメソッドを使用して実行できます。

様々なエレメント・アセットおよびTemplateアセットにより、WebCenter Sitesページが構成されます。エレメント・アセットとは、WebCenter Sitesデータベースからページのコンテンツを取得したり、古くなったアイテムをデータベースから削除するなどのタスクを実行するコードのブロックです。Templateアセットは一般に、Webページのコンテンツを書式設定するために使用されます。エレメントとTemplatesは、JSPで記述できます。

13.2.3 コントローラ

Controllersには、開発者によって作成されたコードのビジネス・ロジックが含まれます。このようなコードをWebCenter Sites 12cで記述するためのプログラミング言語はGroovyで、Javaに類似しています。Groovyは、Java上に構築され、Javaライブラリと簡単に相互運用します。

Controllersのビジネス・ロジックは、一般にWebサイト実装に固有です。ただし、ページまたはページレットの数が多い場合でも、通常は共通の操作をいくつか実行する必要があります。たとえば、ビューに表示するアセットのリストをページのControllerで決定し、ページレットに各アセットを表示できます。アセットのリスト(特定の記事の問合せなど)を作成するには、カスタム・ビジネス・ロジックが必要になる場合があります。この場合、必要なControllerロジックがアセットを検索することになります。このロジックは、Webサイト全体で同じです。

WebCenter Sitesには、Controllersのセットが同梱されており、アセットの読取りの操作など、一般的な使用パターンで構築済です。Oracleでは、必要に応じて、開発者が次のデフォルトのControllersを使用することをお薦めしています。

  • AssetController

  • NavigationController

  • TableController

  • SegmentsController

  • ProfileBasedRecommendationController

  • SegmentBasedRecommendationController

ページの各部分には、カスタムのControllersと、追加のControllersが含まれたビューがある場合があります。Controllersを拡張できます。

13.2.4 ビュー

WebCenter Sitesでは、TemplateおよびSiteEntryアセットがビューを表します。各TemplateおよびSiteEntryアセットは、Controllerインスタンスにリンクできます。

MVCフレームワークを使用してビューを構築する場合は、モデルのデータにアクセスするために、ビューおよびJSTLを構築するためのスクリプト言語として、JSPを使用することをお薦めします。Templateアセットで使用した場合、アセット・データにアクセスするためのWebCenter Sitesタグは引き続き機能しますが、開発者はかわりにJava APIをControllersで使用し、プレゼンテーションの管理にはビュー・コードのみを使用することをお薦めします。これにより、ロジックとプレゼンテーションが分離されます。サーバー側Java APIを参照してください。

13.3 ページ、ページレットおよびエレメント

テンプレート・アセットおよびSiteEntryアセットはどちらもページおよびページレットにできますが、CSElementは常にエレメントです。アセットをページまたはページレットに表示するには、テンプレートおよびエレメントを使用します。

WebCenter Sitesのコンテキストでは、オンライン・ページは複数のコンポーネントを表示可能な最終出力に構成したものです。この出力を作成することをレンダリングといいます。出力またはレンダリングされるコンテンツをパブリック・サイトの訪問者が利用できるようにすることを、パブリッシュといいます。

WebCenter Sitesでは、ページは、ページ名に関連付けられたコードを実行してレンダリングされます。ページの名前はブラウザからWebCenter Sitesに渡され、WebCenter Sitesはそのページ名に関連付けられたコードを起動します。コードは実際には名前付きファイルであり、エレメントと呼ばれるコードの個々のチャンクです。

エレメント内のコードはアセットを識別して、ページまたはページレットに表示するために、そのアセットをロードし、その他のページ名とエレメント名をWebCenter Sitesに渡します。WebCenter Sitesがエレメントを呼び出すと、そのエレメント内のすべてのコードが実行されます。他のエレメントへのコールがある場合は、次にそのエレメントが呼び出されます。さらに、結果(イメージ、記事、リンクセットなど、すべてのHTMLタグを含む)がHTMLコード(または、システムの構成によっては、他の出力フォーマット)にレンダリングされます。

TemplateCSElementおよびSiteEntryの各アセットは、次のようにエレメントとページレットを表現します。

  • Templateアセットは、エレメントおよび、アセットをレンダリングするページまたはページレットの両方になります。

  • CSElementアセットはエレメントです。

  • SiteEntryアセットはページまたはページレットの名前です。

13.4 テンプレート・アセットおよびCSElementアセット

次に、テンプレート・アセットおよびCSElementアセットについて知っておくべき点をいくつか示します。

  • Templateアセットは、1つのアセット・タイプに適用されるのか、どのアセット・タイプにも適用されないのかに応じて、タイプ付きまたはタイプなしに分類されます。

  • SiteLauncherを使用している場合(サイトのレプリケートまたはTemplateアセットとCSElementアセットの共有を目的として)、WebCenter Sitesは、アセット、アセット・タイプ、属性名およびTemplate名を間接的に参照するために、エレメント・ロジックが必要になります。そのため、WebCenter Sitesインタフェースには、「マップ」画面が導入されていて、APIにはrender:lookupタグが導入されています。

    「マップ」画面を使用して、各値に別名を割り当てます。別名をエレメント・ロジックでハードコード化し、render:lookupタグを使用して、実行時に別名から実際値を取得できます。

  • 「キャッシュ規則」フィールドは、エラーを減らすために簡略化されています。Templateの開発者は、「キャッシュ済」「未キャッシュ」または「詳細を選択できます。「詳細」を選択すると、開発者は、WebCenter SitesOracle WebCenter Sites: Satellite Serverに対して個別にキャッシュ規則を設定できるようになります。

  • Templatesの作成プロセスを簡略化した方法でTemplatesを起動するために、calltemplateタグが新規に導入されました。

  • ページ基準フィールドは、「キャッシュ基準」と名前変更されました。これは予約パラメータccidcontextprendermodesitesitepfxft_ssと、カスタム定義済パラメータを受け入れます。

    キャッシュ基準の値は、SiteCatalog表のpagecriteria列に格納されます(旧バージョンでは、SiteCatalog表のresargs列に格納されていました)。

    「キャッシュ基準」フィールドは、CKEditorの「その他のパラメータ」セクションを有効化する変数の保持にも使用され、その変数をユーザーがアセット・リンクを含めるダイアログ・ボックスと「アセット・リンクの追加」ダイアログ・ボックスで使用できるようにします。「その他のパラメータ」セクションには、カスタム・パラメータ(イメージ・ディメンションなど)をTemplateに渡す方法が用意されています。『Oracle Fusion Middleware Oracle WebCenter Sitesの使用』のCKEditorの使用に関する項を参照してください。

  • TemplateアセットとCSElementアセットの作成フォームはタブによって細分化されており、フィールドはタブ上で機能別に編成されています。

テンプレート・アセット、CSElementアセットおよびSiteEntryアセットの作成を参照してください

13.5 ページ・アセットおよびサイト・ナビゲーション

ページ・アセットには、他のアセットへの参照が格納され、これらの参照はサイト設計に従って編成されます。サイトのセクションを表す場合、ページ・アセットは、完成済Webサイトと似た便利な構造的構成を提供します。

サイト開発者は、通常はサイトの設計時にページ・アセットを作成します。ページ・アセットの作成を参照してください。

ページ、記事、その他のタイプのアセットを、関連付けられているアセットを書式設定するページ・アセットおよびコード・テンプレートに関連付けることができます。

ページ・アセットに関連付けられているTemplateには、レンダリングされたページおよびレンダリングされた他のページへのナビゲーションのレイアウトが含まれます。

ページ・アセットのサイト・ナビゲーションを集約するには、WebCenter Sites Java APIまたはREST APIを使用できます。サーバー側Java APIおよびREST APIを参照してください。

13.6 日付ベースのプレビュー

日付ベースのレンダリングを使用すると、コンテンツ・コントリビュータはContributorインタフェースでアセットをプレビューできます。表示の日付に基づいて変更されるWebサイトの構築に関心がある場合は、アセットで使用可能な開始日および終了日を使用できます。このようなWebサイトが将来の日付の時点でどのように表示されるかについて、WebCenter Sitesプレビュー・ツールを使用してプレビューすることもできます。

コンテンツ作成者は、Contributorインタフェースの「編集」画面で開始日と終了日を指定できます。サイトのユーザー・インタフェースでコンテンツをプレビューし、将来の日付に移動して、その日付の時点でサイトがどのように表示されるかを見ることができます。

たとえば、休日用のサイトを構築して、どのように表示されるかをプレビューできます。

アセット・リーダー(日付別にフィルタできる便利なJava API)を参照してください。

13.7 多言語サポート

WebCenter Sitesで開発された多言語サイトのユーザーは、ロケール(言語バージョン)指定をアセットに割り当てて、アセットの翻訳を作成できます。オンライン・サイトに表示されるアセットの言語バージョンを決定し、リクエストした言語バージョンが存在しなかったらどうするかを決定するサイト固有の配信ルールを作成できます。

WebCenter Sitesのロケール指定は、ディメンションの概念によって実装されます。ディメンションとは、別の点では意味的に同一であるアセットを区別する識別子のことです。ロケール(例: アメリカ英語はen_US)は、同一のコンテンツに対する2つの翻訳を区別するディメンションの1タイプです。

ディメンションは、タイプDimensionのアセットで表されます。このアセット・タイプは、ユーザーがDimensionアセット(サブタイプLocale)を作成できるよう、またコンテンツ・プロバイダがロケール指定を翻訳対象のアセットに割り当てることができるように、開発者がサイト単位で有効にする必要があります。

注意:

ユーザーは、ロケール指定が割り当てられていないアセットの翻訳を作成できません。

Dimensionアセットは、サイトでロケールを表示します。たとえば、en_US Dimensionアセットはアメリカ英語、fr_CA Dimensionアセットはカナダ仏語を表します。アセット・リーダー(翻訳されたアセットにアクセスできるJava API)を参照してください。

指定したロケールでコンテンツをパブリッシュするには、ロケールをオンラインサイトで有効にする必要があります。これにより、ロケールを示すDimensionアセットが配信システムに公開され、サイトのDimensionセットにそのロケールが追加されます。

13.8 MVCフレームワークのキャッシング

MVCフレームワークのページ・キャッシング機能は、JSPタグを使用してコーディングされるTemplateアセットと似ています。新しいフレームワークでは、ビジネス・ロジック・コードはControllerアセットに移動し、プレゼンテーション要素のみを処理するTemplateアセットが残ります。ページ・キャッシングでキャッシュされるものは、まだページまたはページレット・マークアップです。ページレットに関連付けられているビジネス・ロジックが実行されるのは、ページレットが未キャッシュの場合のみです。

Templateに関連付けられているControllerアセットは、キャッシュ依存性として、Controllerのビジネス・ロジックで読み取られるすべてのアセットとともに追加されます。ControllerアセットまたはControllerのビジネス・ロジックの一部として読み取られるアセットを更新すると、キャッシュは無効化されます。

Templateアセットのキャッシュ基準の引数は、ページレット・レベルのキャッシュ動作を引き続き決定します。WebCenter Sitesでのキャッシュの仕組みの詳細は、「ページのデザインとキャッシングの理解」を参照してください。

13.9 サーバー側Java API

Webページをまとめるには、通常、多種多様なサーバー側Java APIを使用します。

WebCenter Sitesは、次のものを備えています。

これらのAPIの簡単な説明とサンプルを次に示します。「開発者のサンプルWebサイト」では、追加の説明とサンプルについて示します。

13.9.1 アセット・リーダー

アセット・リーダーAPIは、アセットを読み取り、すべてのデータまたは指定したデータを返します。AssetReaderのメソッドを使用すると、簡素化された方法でアセットを読み取り、必要な関連情報のみを返すことができます。

Controllerは、これらのメソッドと相互に組み合せて使用し、Templateですぐに使用可能なアセットを構築します。この例は、アセットの読取りにAssetReaderを使用可能な簡単なControllerを示しています。

例13-1 アセット・リーダーController

package oracle.webcenter.sites.controller

import com.fatwire.assetapi.data.*
public class AssetController extends BaseController
{
      @RequiredParams(query="c,cid")
      public void doWork(Map models)
      {
            Map assetMap = newAssetReader()
                              .forAsset(getAssetId())
                              .selectAll(true)
                              .read();
            models.put("asset", assetMap);
      }

このassetDataマップは、AssetControllerをそのControllerとして選択するTemplateで使用できます。この例は、アセットをレンダリングするTemplateがどのようになるかを示しています。

例13-2 アセット・リーダーのテンプレート

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld"
%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
%><cs:ftcs><%-- AVIArticle/myarticle --%>
<table border="1">
    <c:forEach var="a" items="${asset}">
    <tbody>
        <tr>
            <td><h4>${a.key} : </h4></td>
            <td>${a.value}</td>
        </tr>
        </tbody>
     </c:forEach>
</table>
</cs:ftcs>

Controllerは、アセットIDが'1328196047443'、アセット・タイプが'AVIArticle'のアセットを読み取り、マップ'assetData'に配置します。selectAll(true)メソッドは、そのすべての属性でアセットを構築します。

詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューからアセット・リーダーを選択します。

13.9.2 ナビゲーション・リーダー

ナビゲーション・リーダーAPIは、ナビゲーション用のブレッドクラムをペイントします。

この例は、アセット用のサンプルのナビゲーションControllerを示しています。

例13-3 ナビゲーションController

package oracle.webcenter.sites.controller
import com.fatwire.assetapi.data.*
import com.openmarket.xcelerate.asset.*

public class NavigationController extends BaseController
{
      @RequiredParams(query="c,cid")
      public void doWork(Map models)
      {
            Map assetMap = newNavigationReader()
                .forAsset(getAssetId())
                .read();
            models.put("asset", assetMap);
      }
}

この例は、ナビゲーションControllerのサンプル・ビュー(テンプレート)を示しています。

例13-4 ナビゲーションControllerのビュー

<%@ taglib prefix="render" uri="futuretense_cs/ftcs1_0.tld"

%><%-- Page/avipage --%>

      Asset Name : ${asset.name}

      Asset Id : ${asset.name}

      Asset Parent : ${asset.parents[0].name}

BaseControllernewNavigationReader()メソッドは、ナビゲーション・リーダーを返します。前述のサンプルControllerは、サイト・プランのアセットの直接の親をフェッチします。たとえば、avisportsの非タッチSurfingページの階層はNonTouch/Home/Surfingで、その前のTemplateは、次のテキストを出力します。

Asset Name : Surfing
Asset Id : Surfing
Asset Parent : Home

詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューからナビゲーション・リーダーを選択します。

13.9.3 リンク・ビルダー

リンク・ビルダーAPIは、アセットへのリンクを生成します。

この例は、サンプルControllerを示しています。

例13-5 リンク・ビルダーController

package oracle.webcenter.sites.controller

import com.fatwire.assetapi.data.*
import com.openmarket.xcelerate.asset.*

public class linfo extends BaseController {

        @Override
        public void doWork(Map models) {
        LinkInfo linkInfo = newAssetLinkInfo();
        linkInfo.forAsset(getAssetId());

        Map assetMap = newAssetReader()
            .forAsset(assetID)
            .selectAll(true)
            .addAssetLinkInfo(linkInfo)
            .read();
        models.put("asset", assetMap);
        }
}

この例は、リンク・ビルダーのサンプルTemplateを示しています。

例13-6 リンク・ビルダーTemplate

<%@ taglib prefix="render" uri="futuretense_cs/ftcs1_0.tld"%>

    <cs:ftcs><%-- AVIArticle/myarticle --%>
        <table border=1>
            <tr>
                <td><h4> Asset Name : </td>
                <td></h4> ${asset.name} </td>
            </tr>
            <tr>
                <td><h4>Link: </td>
                <td?</h4><a href="${asset._link_}"> ${asset._link_}</a></td>
            </tr>
        </table>
    </cd:ftcs> 

前述のコード・サンプルは、LinkInfoの簡単なControllerおよびTemplateを示します。このコードは、アセットIDが‘1328196047443’のArticleのリンクを生成します。アセット・マップには、キー、_link_(値はアセットのデフォルトのURL)が含まれます。

Templateでは、${asset._link_}でアセットのデフォルトのURLをフェッチする必要があります。リンクは次のようになります。

http://localhost:8080/cs/avi/avisection/baseball.html

詳細は、「開発者のサンプルWebサイト」に移動し、レンダリングAPIメニューからリンク・ビルダーを選択します。

13.9.4 BLOBリンク・ビルダー

BLOBリンク・ビルダーAPIは、BLOBへのリンクを生成します。アセットの読取り時にBLOBリンクを表示する場合は、addBlobLinkInfo(BlobLinkInfo blobLinkMaker)メソッドを使用できます。

この例は、サンプルControllerを示しています。

例13-7 BLOBリンク・ビルダーController

package oracle.webcenter.sites.controller

import com.fatwire.assetapi.data.*
import com.openmarket.xcelerate.asset.*

public class bloblink extends BaseController
{
    public void doWork(Map models)
    {

      def mapParams = [:]
      mapParams.put("blobheadername1","Content-Type")
      mapParams.put("blobheadervalue1","image/gif")
      mapParams.put("blobheadername2","Cache-Control")
      mapParams.put("blobheadervalue2","no-cache")
      
      BlobLinkInfo blobLink = newBlobLinkInfo();
      blobLink.parameters(mapParams)
          

      Map assetMap = newAssetReader().forAsset(getAssetId())
            .select("Assoc_Named_Manual.*")
            .addBlobLinkInfo(blobLink)
            .read();
        models.put("asset", assetMap);
    }
}

この例は、BLOBリンク・ビルダーのサンプルTemplateを示しています。

例13-8 BLOBリンク・ビルダーTemplate

<cs:ftcs><%-- Product_C/ptemplate --%>
    <table border=1>
    <tr>
    <td><h4>Link1: </td>
    <td></h4><a href='${asset["Assoc_Named_Manual.FSIIDocumentFile_bloblink_"]}'>
    ${asset["Assoc_Named_Manual.FSIIDocumentFile_bloblink_"]}</a></td>
    </tr>
    <tr>
    <td><h4>Link2: </td>
    <td></h4><a href='${asset["Assoc_Named_Manual.FSIIHtmlFile_bloblink_"]}'>
    ${asset["Assoc_Named_Manual.FSIIHtmlFile_bloblink_"]}</a></td>
    </tr>
    </table>
    </cs:ftcs>

前述のコードは、アセットIDが1114083739596Product_ Cに関連付けられているBLOBアセットへのリンクを出力します。このアセットには、FSIIDocumentFileFSIIHtmlFileの2つのBLOBで構成される、Document_Cアソシエーションが含まれます。コードには、これらのBLOBへのリンクが表示されます。

/sites/BlobServer?blobkey=id&blobnocache=true&blobwhere=1114725604909&blobcol=urldata
&blobtable=MungoBlobs&Content-Type=image/gif&Cache-Control&no-cache

/sites/BlobServer?blobkey=id&blobnocache=true&blobwhere=1114725604910&blobcol=urldata
&blobtable=MungoBlobs&Content-Type=image/gif&Cache-Control&no-cache

バニティURLがある場合は、コードにそれが表示されます。

詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューからBLOBリンク・ビルダーを選択します。

13.9.5 検索

検索APIは、アセットに対する検索問合せを構築します

例13-9 検索Controller

この例は、検索のサンプルTemplateを示しています。

package oracle.webcenter.sites.controller

import com.fatwire.assetapi.data.*
import com.openmarket.xcelerate.asset.*

public class SearchController extends BaseController
{
    @RequiredParams(query="c,cid")
    public void doWork(Map models)
    {
        def results = newSearcher().searchFor("audio")
        models.put("results",results)
    }
}

この例は、検索のサンプルTemplateを示しています。

例13-10 検索Template

<%@ taglib prefix="render" uri="futuretense_cs/ftcs1_0.tld"%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
%><cs:ftcs><%-- Product_C/ptemplate --%>
    <table>
        <c:forEach var="result" items="${results}" >
            <tr>
                <td>
                    ${result.id}
                </td>
                <td>
                    ${result.name}
                </td>
            </tr>
        </c:forEach>
    </table>
</cs:ftcs>

BaseControllernewSearcher()メソッドは、検索を返します。Searcherクラスの1つ以上のメソッドをこの検索に適用できます。前述のControllerは、"audio"の語が含まれるすべてのアセットを収集します。語を含み、特定のサイトに属するすべてのアセットを検索するには、inSite(String site)メソッドを使用できます。

def results = newSearcher().inSite("FirstSiteII").searchFor("audio")

詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューから検索を選択します。

13.9.6 推奨リーダー

推奨リーダーAPIは、訪問者のセグメンテーションに基づいて、性別や趣味などの属性別に訪問者に対するお薦めを読み取ります。セグメントの訪問者には、1つ以上のアセットが推奨されます。

特定の訪問者が分類されるすべてのセグメントを読み取るには、例に示すように、readSegments()メソッドおよびTemplateを推奨リーダーに使用できます。

例13-11 セグメントを読み取るためのメソッド

 Controller Logic:
.
package oracle.webcenter.sites.controller
.
import com.fatwire.assetapi.data.*
import com.openmarket.xcelerate.asset.*
import com.fatwire.assetapi.fragment.*
import com.fatwire.assetapi.common.AssetAccessException;
.
public class RecommendationController extends BaseController
{
    @Override
@RequiredParams(query = "segments,recommendation,sitename")
protected void doWork(Map models) {
String segments = variables.segments;
String recommendation = variables.recommendation;
String sitename = variables.sitename;
try {
List<Map> recommendations = newRecommendationReader()
.forSite(sitename)
.forSegments(segments)
.readRecommendations(recommendation);
models.put("segments", segments);
models.put("recommendation", recommendation);
models.put("sitename", sitename);
models.put("recommendations", recommendations);
} catch (AssetAccessException e) {
e.printStackTrace();
}
}
}
.
Template Logic:
.
<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld"
%><%@ taglib prefix="ics" uri="futuretense_cs/ics.tld"
%><%@ taglib prefix="render" uri="futuretense_cs/render.tld"
%><%@ taglib prefix="fragment" uri="futuretense_cs/fragment.tld"
%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"
%>
<cs:ftcs><%-- /RecommendationTemplate --%>
<%-- Record dependencies for the Template --%>
<ics:if condition='<%=ics.GetVar("tid")!=null%>'><ics:then><render:logdep
cid='<%=ics.GetVar("tid")%>' c="Template"/></ics:then></ics:if>
.
Segments : ${segments}
Recommendation : ${recommendation}
Site Name : ${sitename}
Recommendations :
.
    <table>
      <c:forEach var="singleRecommendation" items="${recommendations}" >
        <tr>
            <td>
                ${singleRecommendation}
             </td>
          </tr>
      </c:forEach>    
    </table>
.
</cs:ftcs>

前述のコード・サンプルは、現在のセグメントに対して、特定のサイトで、特定の推奨に推奨されるすべてのアセットを表示します。

詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューから推奨リーダーを選択します。

13.9.7 表リーダー

表リーダーAPIは、WebCenter Sitesによって管理される表を問い合せます。

この例は、表リーダーのサンプルControllerを示しています。

例13-12 表リーダーController

package oracle.webcenter.sites.controller

import com.fatwire.assetapi.data.*
import com.openmarket.xcelerate.asset.*
import oracle.fatwire.api.TableReader;

public class TableReader extends BaseController
{
    public void doWork(Map models)
    {
        TableReader tr = newTableReader()
        def myResult = tr.from("AVIArticle").execute()
        models.put("asset", myResult)
    }
}

新しいTableReader()メソッドは、BaseControllerのファクトリ・メソッドです。前述のコード・サンプルは、AVIArticle表からすべてのデータをフェッチして、assetという名前のマップに配置します。

select(String select)メソッドでSELECTパラメータを指定できます。

def myResult = tr.select("name").from("AVIArticle").execute()

このコードは、AVIArticle表のname列のすべての値を返します。

詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューから表リーダーを選択します。

13.10 REST API

WebCenter Sitesでは、集約的な方法でコンテンツにアクセスするためのREST APIが用意されています。APIには、その名前のとおりのURLが付属しています。検索APIは、様々な機能を提供する大規模なメタデータをサポートしています。たとえば、選択したフィールドの特定の値とともに、特定のタイプのアセットのカスタマイズされたリストを取得できます。

Oracle Fusion Middleware Oracle WebCenter Sites集約REST APIリファレンスを参照してください。

13.11 サンプルWebサイト

WebCenter SitesサンプルWebサイトを使用すると、WebCenter Sitesフレームワークを理解できます。

  • サンプル・サイト

    「開発者のサンプルWebサイト」を参照してください。

  • avisportsサンプル・サイト

    このサイトでは、avisportsは、フォーム・モードおよびWebモードでのアセットの作成や編集など、WebCenter Sites Contributorインタフェースでの機能を示します。また、avisportsでは、アセットの「作成」ビューや「編集」ビューをWebモードでレンダリングするようにコーディングされたサンプルTemplatesが、開発者に提供されます。

  • REST-avisportsサンプルWebサイト

    このサイトには、REST APIで完全に構築されたavisportsのサンプルの参照実装が含まれます。Webサイトの機能的な面はavisportsと同等で、同じアセット・モデルとコンテンツを使用します。このサンプル・サイトは、REST APIに基づいてWebサイト開発を開始するための適切な参照ポイントです。