Oracle WebCenter Sitesモデル・ビュー・コントローラ・フレームワークでは、組織のデータ・モデルをコーディングするために、Java開発者はJSPでビュー用のテンプレートを記述し、Groovyを使用してコントローラにビジネス・ロジックをコーディングできます(WebCenter Sites Java APIで効率化できます)。Web開発者は、ビューにプレゼンテーション・エレメントを追加できます。
トピック:
Oracle WebCenter Sitesモデル・ビュー・コントローラ(MVC)フレームワークでは、モデルはデータ・モデルです。ビューについては、Template
またはSiteEntry
オブジェクトを作成します。即時利用可能なController
を使用することも、1つ作成してモデルとビューをまとめて結合することもできます。
Oracle WebCenter Sitesモデル・ビュー・コントローラ(MVC)フレームワークについては、「サーバー側MVCフレームワーク」で説明しています。
WebCenter Sitesには、アセットの読取り用のナビゲーションなどの一般的な使用パターンを使用してすでに構築されたController
が複数用意されています。これらの即時利用可能なController
の詳細は、「コントローラ」を参照するか、開発者のサンプルWebサイトに移動し、「はじめに」メニューから即時利用可能なコントローラを選択します。
コントローラ・インタフェースには、個別のテストを使用して独立したWebCenter Sitesコントローラを記述できるhandleRequest()
メソッドが含まれます。
インタフェースは次のようになります。
public interface Controller { /** * Run the controller with all the information passed in from setters * @return a ModelAndView object * @throws ControllerException throws this Exception if errors occurred in processing */ DependenciesAwareModelAndView handleRequest() throws ControllerException; }
一連のデフォルトのWebCenter Sites固有の機能を提供するために、新しいWCSControllerが作成されます。
public interface WCSController extends Controller { /** * setting an ics into the Controller, ICS is needed for retrieving information related to Controller * @param ics the ICS object */ public void setICS( ICS ics ); /** * Get the current device * @return the device object */ public Device getDevice(); /** * set the current device * @param device the device */ public void setDevice(Device device); /** * get the query parameters specified for this request. For multi-valued query parameter, provide the * name=value for each parameter value. For eg. attributes=name&attributes=description&attributes=tag. * @return the query parameters map */ public Map<String, List<String>> getQueryParams(); /** * get the headers for this request * @return the headers map */ public Map<String, List<String>> getHeaders(); /** * get the template parameters specified in Site for this requested page * @return the template parameters map */ public Map<String, String> getTemplateParams(); /** * get the current view * @return the view information */ public String getViewMarkup(); /** * get the template map information * @return the template map */ public List<Map<String, String>> getTemplateMap(); /** * get the current session variables for the request * @return the session variables */ public Map<String, String> getSessionVariables(); /** * get the variables that were available in current ICS * @return the variables */ public Map<String, String> getVariables(); /** * get the element catalog parameters specified in Site for this requested page * @return the element catalog parameters map */ public Map<String, String> getElementCatalogParameters(); /** * setting the current view into the Controller * @param view the current view markup */ void setViewMarkup(String view); /** * setting the the redirect view pagename into the Controller * @param redirectViewPagename the redirect view pagename */ void setRedirectViewPagename(String redirectViewPagename); /** * Getting the redirect view pagename * @return the redreict view pagename */ String getRedirectViewPagename(); /** * Set all request parameters into Controller * @param queryParams the request parameters */ void setQueryParams(Map<String, List<String>> queryParams); /** * Set all request headers into the view * @param headers the request headers */ void setHeaders(Map<String, List<String>> headers); /** * Set all template parameters related to current view into Controller * @param templateParams the template parameters (SiteCatalog parameters) */ void setTemplateParams(Map<String, String> templateParams); /** * Set all template map information into the Controller * @param templateMap the list of template map information for current page */ void setTemplateMap(List<Map<String, String>> templateMap); /** * Set all ics session variables into the view * @param sessionVariables the current ics session variables */ void setSessionVariables( Map<String, String> sessionVariables ); /** * Set all ics variables into the view * @param variables the current ics variables */ void setVariables( Map<String, String> variables ); /** * Set all ElementCatalog parameters into the view * @param elementCatalogParameters the ElementCatalog parameters */ void setElementCatalogParameters( Map<String, String> elementCatalogParameters); }
デフォルトのBaseControllerでは、コントローラを実装している未提供の顧客にデフォルトのWebCenter Sites機能を提供するWCSControllerを実装します。WCSControllerにより、アセットおよび他のWebCenter Sitesデータへのアクセスが容易になります。新しいセットの注釈を使用すると、顧客が特定のWebCenter Sites固有のプロパティをコントローラに注入できます。特に、プロパティ(AssetReader、NavigationReader、ics変数、icsセッション変数、ヘッダー、問合せパラメータおよびControllerInvoker)を注入するために注釈が追加されました(顧客は、コントローラ名を渡すことができます。現在のコントローラの渡されたコントローラを起動します)。注釈を使用して基本的な共通機能を提供するサンプル・コントローラは、次のとおりです。
Hello Worldコントローラ
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.IItem import COM.FutureTense.Cache.AccessedItem import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIIHelloWorld implements Controller { private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { models.put("text", "Hello World"); return new ModelAndViewInstance( models ); } }
このコントローラはコントローラ・インタフェースを実装し、簡単なデモとしてHello Worldメッセージをモデルに設定するだけです。
AssetReaderコントローラ
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIIAssetReader implements Controller { @InitAssetReader (assetType="AVIArticle", assetId=1328196047241 ) private AssetReader assetReader; @InitAssetReader ( select="name,description" ) private AssetReader assetReaderWithoutId; @InitRequestValuesMap (type=RequestValuesType.VARIABLES) private Map<String, Object> icsVariables; private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { models.put("assetReader", assetReader.read()); models.put("assetReaderWithoutId",assetReaderWithoutId.forAsset( (String)icsVariables.get("c"), Long.parseLong((String)icsVariables.get("cid"))).read()); return new ModelAndViewInstance(models); } }
AssetReaderコントローラは3つの注釈を使用し、2つのAssetReaderを初期化してコントローラで使用できるようにします。最初のAssetReaderは、assetTypeおよびassetIdが注釈パラメータを介して渡されて初期化されます。2番目は、icsVariablesの値を使用してhandleRequestメソッド内でAssetReader assetType/assetIdが初期化されます。各AssetReaderは指定されたアセットを読み取り、表示するモデルに結果を配置します。
NavigationReaderコントローラ
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIINavigationReader implements Controller { @InitNavigationReader (assetType = "Page", assetId = 1346043544347) private NavigationReader navigationReader; private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { models.put("navigationReader", navigationReader.read()); return new ModelAndViewInstance(models); } }
AssetReaderコントローラと同様に、NavigationReaderコントローラは注釈を使用してコントローラのNavigationReaderを初期化します。そのため、ユーザーが使用してWebCenter Sitesのナビゲーション情報にアクセスできます。
変数、ヘッダー、セッション変数およびリクエスト・パラメータ
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIIVariablesAnnotations implements Controller { @InitRequestValuesMap (type=RequestValuesType.HEADERS) private Map<String, Object> headers; @InitRequestValuesMap (type=RequestValuesType.VARIABLES) private Map<String, Object> icsVariables; @InitRequestValuesMap (type=RequestValuesType.QUERY_PARAMS) private Map<String, Object> params; @InitRequestValuesMap (type=RequestValuesType.SESSION_VARIABLES) private Map<String, Object> icsSessionVariables; private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { models.put("headers", headers); models.put("variables", icsVariables); models.put("sessionVariables", icsSessionVariables); models.put("queryParams", params); return new ModelAndViewInstance(models); } }
これらの注釈は、コントローラで使用するヘッダー、ics変数、icsセッション変数およびリクエスト・パラメータからコントローラの一連の変数を移入します。
コントローラからの依存性の記録
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.IItem import COM.FutureTense.Cache.AccessedItem import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIILogDeps implements Controller { private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { models.put("text", "Log Controller Deps"); List<IItem> items = new ArrayList<IItem>(); items.add( new AccessedItem("Deps logged from Controller")); return new ModelAndViewInstance(models, items); } }
このコントローラは、ユーザー定義の依存性をコントローラから記録する方法を示します。
コントローラからのビュー・マークアップの表示
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIIViewMarkup implements Controller { private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { models.put("text", "Some Text"); return new ModelAndViewInstance(models, null, "Display this view markup text from Controller", null); } }
このコントローラは、元のページが表示されないかわりにコントローラから戻されるviewMarkupTextのテキストが戻されることをWebCenter Sitesに通知します。
別のWebCenter Sitesページへのビューのリダイレクト
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIIRedirectView implements Controller { private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { return new ModelAndViewInstance(models, null, null, "FirstSiteII/FSIIRedirectedView"); } }
このコントローラは、ページを別のWebCenter Sitesページ・コンテンツにリダイレクトするようにWebCenter Sitesに指示します。
別のコントローラの呼出し
package oracle.webcenter.sites.controller import COM.FutureTense.Common.ControllerException import COM.FutureTense.Interfaces.Controller import COM.FutureTense.Interfaces.DependenciesAwareModelAndView import COM.FutureTense.Interfaces.IItem import COM.FutureTense.Cache.AccessedItem import COM.FutureTense.Interfaces.ModelAndView import COM.FutureTense.Interfaces.ModelAndViewInstance import com.fatwire.assetapi.data.* import com.fatwire.assetapi.site.NavigationReader import com.openmarket.xcelerate.asset.* import com.fatwire.assetapi.fragment.* public class FSIICallAnotherController implements Controller { @InjectControllerInvoker (controllerName = "FSIIHelloWorld", pagename = "FirstSiteII/FSIIHelloWorld") private ControllerInvoker controllerInvoker; private Map models = new HashMap(); public Map getModels() { return models; } public DependenciesAwareModelAndView handleRequest() throws ControllerException { ModelAndView modelAndView = controllerInvoker.invoke(new HashMap()); models.putAll(modelAndView.getModel()); return new ModelAndViewInstance( models); } }
渡されたコントローラがこのコントローラ内で起動できるように、このコントローラは、コントローラ名を使用してControllerInvokerを初期化するために注釈を使用します。
Oracle WebCenter SitesのAdminインタフェースでは、「新規コントローラを作成」ウィザードを使用してコントローラ
を迅速かつ容易に作成できます。そのために必要なのは、コントローラ
に名前を付け、そのビジネス・ロジックをウィザードに追加することだけです。
同様に、Eclipse IDE内のOracle Developer Toolsを使用してController
を作成することもできます。EclipseでのWebCenter Sitesリソースの管理を参照してください。
Adminインタフェースを介してController
を作成するには:
WebCenter Sites Adminインタフェースの「新規」ページで、アセット・タイプ表内の新規コントローラをクリックします。
新規コントローラの作成ウィザードが開きます。
「名前」フィールドに、新規Controller
の名前を入力します。
(オプション)「説明」フィールドに、新規Controller
の説明を入力します。
「コントロール・ロジック」フィールドで、ビジネス・ロジック・コードを追加します。
「保存」アイコンをクリックします。
Controller
の開発の詳細は、開発者のサンプルWebサイトに移動し、サイトのレンダリングメニューから「コントローラ」を選択します。
WebCenter Sites Adminインタフェースの使いやすいテンプレート・フォームにより、テンプレート
・アセットを速やかに作成できます。
Adminインタフェースを使用してTemplate
を作成するには:
「新規」をクリックします。
右側の表で、「テンプレート」の隣にある「新規テンプレート」リンクをクリックします。
Template
フォームに入力します。
Template
を保存します。
Template
の作成の詳細は、「テンプレート・アセットの作成」を参照してください。
一般的なエレメントを使用するWebサイト用にモジュール式ホーム・ページを設計します。それらのエレメントの共通するコードをいくつかの場所またはコンテキストで使用できます。
Webサイトのホーム・ページの設定の詳細は、次の項を参照してください。
Oracle WebCenter Sitesにはナビゲーション・リーダー、リンク・ビルダーおよびボブ・リンク・ビルダーのJava APIが用意されており、Webサイト用にサイト・ナビゲーションを作成する場合に使用できます。
次のJava APIを使用してWebサイトにサイト・ナビゲーションを追加できます。
これらのJava APIの詳細は、開発者のサンプルWebサイトのレンダリングAPIメニューに移動してください。