13 MVCフレークワークおよびAPIを使用したWebsサイト開発
Oracle WebCenter Sitesでは、サーバー側Webサイトの開発用のモデル・ビュー・コントローラ(MVC)フレームワークとJava API、およびクライアント側でレンダリングされるWebサイトの構築用REST APIが用意されています。これらのテクノロジにより、柔軟かつ拡張可能なWebサイトを開発できます。
トピック:
サーバー側およびクライアント側の開発方法
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を参照してください。
-
サーバー側MVCフレームワーク
MVCデザイン・パターンでは、モデル、ビューおよびコントローラ
を分離します。モデルはデータを表し、ビューはプレゼンテーションを表し、コントローラ
はモデルとビューをリンクします。明確に分離することで、コードが読みやすく容易に変更できるようになり、技術の変化に対応するのも容易になります。
-
モデルはデータを表します。
WebCenter Sitesでは、モデルはキーと値のペアのマップです。ビジネス・ロジックで決定されるアセット・データおよび任意のデータは、モデルの一部になります。
-
ビューはプレゼンテーションを表します。
WebCenter Sitesでは、ビューは、ブラウザにレンダリングされる
Template
オブジェクトまたはSiteEntry
オブジェクトになります。ビューには、ビジネス・ロジックが含まれず、ユーザーがデータを表示および変更するインタフェースで、モデルデータをレンダリングします。また、ユーザー・アクション(訪問者のクリック操作など)をController
に送信します。 -
Controller
は、モデルおよびビューをリンクします。基礎となるデータでビジネス・ロジックを実行すると、ビューで使用できるようにController
がモデルを集約します。WebCenter Sitesでは、
Controller
は標準のアセット・インスタンスです。プレゼンテーション・アセット(Template
またはSiteEntry
アセット・タイプ)は、Controller
にリンクできます。このリンクはオプションです。存在する場合、ビューを起動する前に、リンクされたController
がWebCenter 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フレームワークの各部分について説明します。
開発者のサンプルWebサイト
開発者のサンプルWebサイトでは、新しいMVCフレームワークの概要、開始例、サーバー側Java APIの例、注釈、グラマーの選択、カスタムBean、フォーム検証、RESTエンドポイント、フラグメント、ウォッチャなどの高度なトピックが表示されます。
この参照Webサイトは、Contributorインタフェースのサンプル・サイトに基づいています。
開発者のサンプルWebサイトにアクセスするには、インストールのホスト名とポート番号とともに、次のURLを入力します。
http://hostname:port/sites/samples/overview
WebCenter Sites MVCフレームワークの概要
この図は、リクエストの構造(MVCフレームワーク経由でリクエストが渡され、レスポンスを生成)を示しています。
WebCenter Sitesでは、MVCフレームワークにはフロントController
が含まれます。Oracle WebCenter Content ServerまたはSatellite Serverサーブレットは、フロントController
として機能し、様々なディスパッチおよびキャッシュ・サービスを処理します。
クライアントからのリクエストがフロントController
に到達すると、リクエストURLに応じて、リクエストのビジネス・ロジックが含まれるTemplate
に関連付けられている実際のController
インスタンスを解決します。フロントController
は、最初にビュー・エレメント(例: Template
アセット)を特定してから、ビューに関連付けられているController
インスタンスを検索します(Template
がController
にリンクされている場合)。
ページのビジネス・ロジックが含まれる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で記述できます。
コントローラ
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
を拡張できます。
ビュー
WebCenter Sitesでは、Template
およびSiteEntry
アセットがビューを表します。各Template
およびSiteEntry
アセットは、Controller
インスタンスにリンクできます。
MVCフレームワークを使用してビューを構築する場合は、モデルのデータにアクセスするために、ビューおよびJSTLを構築するためのスクリプト言語として、JSPを使用することをお薦めします。Template
アセットで使用した場合、アセット・データにアクセスするためのWebCenter Sitesタグは引き続き機能しますが、開発者はかわりにJava APIをControllers
で使用し、プレゼンテーションの管理にはビュー・コードのみを使用することをお薦めします。これにより、ロジックとプレゼンテーションが分離されます。サーバー側Java APIを参照してください。
ページ、ページレットおよびエレメント
テンプレート・アセットおよびSiteEntryアセットはどちらもページおよびページレットにできますが、CSElementは常にエレメントです。アセットをページまたはページレットに表示するには、テンプレートおよびエレメントを使用します。
WebCenter Sitesのコンテキストでは、オンライン・ページは複数のコンポーネントを表示可能な最終出力に構成したものです。この出力を作成することをレンダリングといいます。出力またはレンダリングされるコンテンツをパブリック・サイトの訪問者が利用できるようにすることを、パブリッシュといいます。
WebCenter Sitesでは、ページは、ページ名に関連付けられたコードを実行してレンダリングされます。ページの名前はブラウザからWebCenter Sitesに渡され、WebCenter Sitesはそのページ名に関連付けられたコードを起動します。コードは実際には名前付きファイルであり、エレメントと呼ばれるコードの個々のチャンクです。
エレメント内のコードはアセットを識別して、ページまたはページレットに表示するために、そのアセットをロードし、その他のページ名とエレメント名をWebCenter Sitesに渡します。WebCenter Sitesがエレメントを呼び出すと、そのエレメント内のすべてのコードが実行されます。他のエレメントへのコールがある場合は、次にそのエレメントが呼び出されます。さらに、結果(イメージ、記事、リンクセットなど、すべてのHTMLタグを含む)がHTMLコード(または、システムの構成によっては、他の出力フォーマット)にレンダリングされます。
Template
、CSElement
およびSiteEntry
の各アセットは、次のようにエレメントとページレットを表現します。
-
Template
アセットは、エレメントおよび、アセットをレンダリングするページまたはページレットの両方になります。 -
CSElement
アセットはエレメントです。 -
SiteEntry
アセットはページまたはページレットの名前です。
テンプレート・アセットおよびCSElementアセット
次に、テンプレート・アセットおよびCSElementアセットについて知っておくべき点をいくつか示します。
-
Template
アセットは、1つのアセット・タイプに適用されるのか、どのアセット・タイプにも適用されないのかに応じて、タイプ付きまたはタイプなしに分類されます。 -
SiteLauncherを使用している場合(サイトのレプリケートまたは
Template
アセットとCSElement
アセットの共有を目的として)、WebCenter Sitesは、アセット、アセット・タイプ、属性名およびTemplate
名を間接的に参照するために、エレメント・ロジックが必要になります。そのため、WebCenter Sitesインタフェースには、「マップ」画面が導入されていて、APIにはrender:lookup
タグが導入されています。「マップ」画面を使用して、各値に別名を割り当てます。別名をエレメント・ロジックでハードコード化し、
render:lookup
タグを使用して、実行時に別名から実際値を取得できます。 -
「キャッシュ規則」フィールドは、エラーを減らすために簡略化されています。
Template
の開発者は、「キャッシュ済」、「未キャッシュ」または「詳細を選択できます。「詳細」を選択すると、開発者は、WebCenter SitesとOracle WebCenter Sites: Satellite Serverに対して個別にキャッシュ規則を設定できるようになります。 -
Templates
の作成プロセスを簡略化した方法でTemplates
を起動するために、calltemplate
タグが新規に導入されました。 -
ページ基準フィールドは、「キャッシュ基準」と名前変更されました。これは予約パラメータ
c
、cid
、context
、p
、rendermode
、site
、sitepfx
、ft_ss
と、カスタム定義済パラメータを受け入れます。キャッシュ基準の値は、
SiteCatalog
表のpagecriteria
列に格納されます(旧バージョンでは、SiteCatalog
表のresargs
列に格納されていました)。「キャッシュ基準」フィールドは、CKEditorの「その他のパラメータ」セクションを有効化する変数の保持にも使用され、その変数をユーザーがアセット・リンクを含めるダイアログ・ボックスと「アセット・リンクの追加」ダイアログ・ボックスで使用できるようにします。「その他のパラメータ」セクションには、カスタム・パラメータ(イメージ・ディメンションなど)を
Template
に渡す方法が用意されています。『Oracle Fusion Middleware Oracle WebCenter Sitesの使用』のCKEditorの使用に関する項を参照してください。 -
Template
アセットとCSElement
アセットの作成フォームはタブによって細分化されており、フィールドはタブ上で機能別に編成されています。
ページ・アセットおよびサイト・ナビゲーション
ページ・アセットには、他のアセットへの参照が格納され、これらの参照はサイト設計に従って編成されます。サイトのセクションを表す場合、ページ・アセットは、完成済Webサイトと似た便利な構造的構成を提供します。
サイト開発者は、通常はサイトの設計時にページ・アセットを作成します。ページ・アセットの作成を参照してください。
ページ、記事、その他のタイプのアセットを、関連付けられているアセットを書式設定するページ・アセットおよびコード・テンプレートに関連付けることができます。
ページ・アセットに関連付けられているTemplate
には、レンダリングされたページおよびレンダリングされた他のページへのナビゲーションのレイアウトが含まれます。
ページ・アセットのサイト・ナビゲーションを集約するには、WebCenter Sites Java APIまたはREST APIを使用できます。サーバー側Java APIおよびREST APIを参照してください。
日付ベースのプレビュー
日付ベースのレンダリングを使用すると、コンテンツ・コントリビュータはContributorインタフェースでアセットをプレビューできます。表示の日付に基づいて変更されるWebサイトの構築に関心がある場合は、アセットで使用可能な開始日および終了日を使用できます。このようなWebサイトが将来の日付の時点でどのように表示されるかについて、WebCenter Sitesプレビュー・ツールを使用してプレビューすることもできます。
コンテンツ作成者は、Contributorインタフェースの「編集」画面で開始日と終了日を指定できます。サイトのユーザー・インタフェースでコンテンツをプレビューし、将来の日付に移動して、その日付の時点でサイトがどのように表示されるかを見ることができます。
たとえば、休日用のサイトを構築して、どのように表示されるかをプレビューできます。
アセット・リーダー(日付別にフィルタできる便利なJava API)を参照してください。
多言語サポート
WebCenter Sitesで開発された多言語サイトのユーザーは、ロケール(言語バージョン)指定をアセットに割り当てて、アセットの翻訳を作成できます。オンライン・サイトに表示されるアセットの言語バージョンを決定し、リクエストした言語バージョンが存在しなかったらどうするかを決定するサイト固有の配信ルールを作成できます。
WebCenter Sitesのロケール指定は、ディメンションの概念によって実装されます。ディメンションとは、別の点では意味的に同一であるアセットを区別する識別子のことです。ロケール(例: アメリカ英語はen_US
)は、同一のコンテンツに対する2つの翻訳を区別するディメンションの1タイプです。
ディメンションは、タイプDimension
のアセットで表されます。このアセット・タイプは、ユーザーがDimension
アセット(サブタイプLocale
)を作成できるよう、またコンテンツ・プロバイダがロケール指定を翻訳対象のアセットに割り当てることができるように、開発者がサイト単位で有効にする必要があります。
ノート:
ユーザーは、ロケール指定が割り当てられていないアセットの翻訳を作成できません。各Dimension
アセットは、サイトでロケールを表示します。たとえば、en_US Dimension
アセットはアメリカ英語、fr_CA Dimension
アセットはカナダ仏語を表します。アセット・リーダー(翻訳されたアセットにアクセスできるJava API)を参照してください。
指定したロケールでコンテンツをパブリッシュするには、ロケールをオンラインサイトで有効にする必要があります。これにより、ロケールを示すDimension
アセットが配信システムに公開され、サイトのDimension
セットにそのロケールが追加されます。
MVCフレームワークのキャッシング
MVCフレームワークのページ・キャッシング機能は、JSPタグを使用してコーディングされるTemplate
アセットと似ています。新しいフレームワークでは、ビジネス・ロジック・コードはController
アセットに移動し、プレゼンテーション要素のみを処理するTemplate
アセットが残ります。ページ・キャッシングでキャッシュされるものは、まだページまたはページレット・マークアップです。ページレットに関連付けられているビジネス・ロジックが実行されるのは、ページレットが未キャッシュの場合のみです。
Template
に関連付けられているController
アセットは、キャッシュ依存性として、Controller
のビジネス・ロジックで読み取られるすべてのアセットとともに追加されます。Controller
アセットまたはController
のビジネス・ロジックの一部として読み取られるアセットを更新すると、キャッシュは無効化されます。
Template
アセットのキャッシュ基準の引数は、ページレット・レベルのキャッシュ動作を引き続き決定します。WebCenter Sitesでのキャッシュの仕組みの詳細は、「ページのデザインとキャッシングの理解」を参照してください。
サーバー側Java API
Webページをまとめるには、通常、多種多様なサーバー側Java APIを使用します。
WebCenter Sitesは、次のものを備えています。
これらのAPIの簡単な説明とサンプルを次に示します。「開発者のサンプルWebサイト」では、追加の説明とサンプルについて示します。
アセット・リーダー
アセット・リーダー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メニューからアセット・リーダーを選択します。
ナビゲーション・リーダー
ナビゲーション・リーダー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}
BaseController
のnewNavigationReader()
メソッドは、ナビゲーション・リーダーを返します。前述のサンプルController
は、サイト・プランのアセットの直接の親をフェッチします。たとえば、avisportsの非タッチSurfingページの階層はNonTouch/Home/Surfing
で、その前のTemplate
は、次のテキストを出力します。
Asset Name : Surfing
Asset Id : Surfing
Asset Parent : Home
詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューからナビゲーション・リーダーを選択します。
リンク・ビルダー
リンク・ビルダー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メニューからリンク・ビルダーを選択します。
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が1114083739596
のProduct_ C
に関連付けられているBLOBアセットへのリンクを出力します。このアセットには、FSIIDocumentFile
とFSIIHtmlFile
の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リンク・ビルダーを選択します。
検索
検索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>
BaseController
のnewSearcher()
メソッドは、検索を返します。Searcher
クラスの1つ以上のメソッドをこの検索に適用できます。前述のController
は、"audio"
の語が含まれるすべてのアセットを収集します。語を含み、特定のサイトに属するすべてのアセットを検索するには、inSite(String site)
メソッドを使用できます。
def results = newSearcher().inSite("FirstSiteII").searchFor("audio")
詳細は、開発者のサンプルWebサイトに移動し、レンダリングAPIメニューから検索を選択します。
推奨リーダー
推奨リーダー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メニューから推奨リーダーを選択します。
表リーダー
表リーダー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メニューから表リーダーを選択します。
REST API
WebCenter Sitesでは、集約的な方法でコンテンツにアクセスするためのREST APIが用意されています。APIには、その名前のとおりのURLが付属しています。検索APIは、様々な機能を提供する大規模なメタデータをサポートしています。たとえば、選択したフィールドの特定の値とともに、特定のタイプのアセットのカスタマイズされたリストを取得できます。
『Oracle WebCenter Sites集約REST APIリファレンス』を参照してください。
サンプル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サイト開発を開始するための適切な参照ポイントです。