ヘッダーをスキップ
Oracle® WebCenter Content Content Portlet Suiteデプロイメント・ガイド
11g リリース1 (11.1.1)
B69397-01
  ドキュメント・ライブラリへ移動
ライブラリ
目次へ移動
目次
索引へ移動
索引

前
 
次
 

A CPSソフトウェア開発キット

この項の項目は次のとおりです。

A.1 ポートレット開発のヒント

CPSでは、可能な場合は常にWeb標準に準拠して、Model-View-Controller設計パターンが使用されています。こうしたベスト・プラクティスに従うことで、ポータブルで保守可能なポートレットが実現します。ポートレット開発者がポートレットを設計および開発する際は、こうしたコーディング・ガイドラインに従う必要があります。

これはポートレット開発の入門書ではありません。なぜなら、ポートレット・プログラミングの基礎には触れていないからです。むしろ、これらのガイドラインは、高品質で一貫したポートレットの実装を促進するために、設計およびコード・レビュー時のチェックリストとして使用してください。

ポートレットを開発する際は、次の実用的な推奨事項に従ってください。

A.2 CPS SDKディレクトリ構造

CPS SDKは、CPS配布パッケージの/sdkディレクトリに格納されています。これは次のサブディレクトリから構成されています。

カスタマイズされたポートレットを構築するには、Javaベースのビルド・ツールであるApache Antをインストールする必要があります。このツールは、次から入手できます。

http://ant.apache.org

A.3 CPSポートレットの構築

CPS SDKを使用して構築したすべてのポートレットには、ディスパッチ構成ファイル、一連のJavaServer Pagesおよび一連のアクション・ハンドラが含まれます。特定ポートレットのリンクをユーザーがクリックすると、関連付けられたアクション・ハンドラが実行されて、アクションの結果がリクエストに配置されます。その後、アクション実行後の宛先として構成されたタイルが取り出されて、関連付けられたJSPページが挿入されます。その後、JSPページが、アクションの結果のデータをモデル化します。詳細は、第A.7項「ディスパッチ構成の作成」を参照してください。

A.4 ReferencePortletsとPortletBuilderの使用方法

CPS SDKには、ReferencePortletsディレクトリとPortletBuilderディレクトリが含まれています。ReferencePortletsディレクトリにはソース・コードが、PortletBuilderディレクトリにはポートレット構築ファイルが含まれます。これらのディレクトリは、同様の構築環境とAntスクリプトを共有します。

このディレクトリ構造は、ポートレット配布を構築するために提供されているAntファイルによって使用されます。PortletBuilder Antスクリプトでは、ポータル・コンテナ用に必要なポートレット・ファイルをパッケージ化する方法の例として、単一のポートレットが構築されます。多数のポートレットを構築する開発者は、それに合せてスクリプトを変更してください。

ディレクトリ構造 定義
lib/compile/$portalvendor ポートレットの構築に必要なライブラリが含まれます。
lib/deploy/$portalvendor ポートレットのデプロイに必要なライブラリが含まれます。
resources/$portalvendor ポートレットのパッケージ化に必要なグローバル・ファイルとポータル・ベンダー固有のファイルが含まれます。
src 新しいポートレットのソース・ファイル。
build/$appserver クラスおよび他の構築関連ファイルの保持用に構築時に生成されたディレクトリ。
build/$appserver 構築後に生成されるディレクトリは、構築されたポートレットの保持用です。
dist/$appserver ポートレットの構築に必要なライブラリが含まれます。

A.5 ポートレット配布を構築するためのAntの使用方法

PortletBuilderおよびReferencePortletsルート・ディレクトリの両方には、ポートレットのコンパイルとパッケージ化を実行するAntファイルが含まれています。このルート・ディレクトリは$workingdirectoryと呼ばれます。配布プロセスは、次のコマンドによって呼び出されます。

cd $workingdirectory
ant dist

この配布を適切に動作させるために、$workingdirectoryディレクトリのbuild.propertiesファイルで次の2つの環境変数を設定する必要があります。

プロパティ名 定義
portal.vendor 現在の配布のターゲットであるポータル・ベンダーの名前。
portlet.name ユーザーが現在の構築用に使用する名前。この名前はポートレットのディスクリプタ・ファイルの生成に使用されます。

新しく構築されたポートレットは$workingdirectory/dist/$portal.vendorディレクトリに格納このプロセスを正しく動作させるには、Apache Antをインストールする必要があります。このツールは、次から入手できます。

http://ant.apache.org

A.6 CPSタグ・ライブラリの使用方法

CPSタグ・ライブラリには、カスタマイズされたポートレットの構築時に役立つタグがいくつか含まれています。CPSタグ・ライブラリは/libディレクトリにあり、JARファイルにバンドルされています。

この項の項目は次のとおりです。

A.6.1 URIの作成

PortletAPIFacadeを通してURLを作成します。modeパラメータはオプションで、これを使用すると、作成されたURLにより、ポートレット・モードがユーザー指定の値に切り替えられます。このタグは、しばしば、次の2つのネストされたタグとともに使用されます。

<SCS:CreateURI mode=("edit" | "help" | "view"">

実行するアクションを指定して、作成されたURLを変更します。このアクション名はPortletDispatch.xmlファイルで定義されます(ポートレット・ディスパッチのフレームワークに関する説明を参照してください)。

<SCS:URIAction name="$actionName">

生成されたURLに名前と値のペアを追加します。

<SCS:URIParameter name="$paramName" value="$paramValue">

コード・サンプル

<a href="
<scsportlet:createURI>
<scsportlet:URIAction value="checkOut"/>
<scsportlet:URIParameter name="documentID" value='<%=id%>' />
</scsportlet:createURI>">
Check Out File
</a>

A.6.2 エラー処理

エラーがあるかどうかが判断されます。エラーが見つかった場合は、タグの本体が評価され、エラー・オブジェクト変数が設定されます。

<SCS:Error id="$errorObject">

コード・サンプル

<scsportlet:error id="error">
<div class="portlet-msg-error">
<%=error.getMessage ("%></div>
</scsportlet:error>

A.6.3 ポートレット・プリファレンス

指定のポートレット・プリファレンスが取得され、指定の変数名に結果が格納されます。

<SCS:getPreference preference="$prefName" result="$resultVar">

コード・サンプル

<scsportlet:getPreference preference="maxResults" result="maxResultsVar" />

A.7 ディスパッチ構成の作成

ディスパッチ構成ファイルによって、各アクション・ハンドラ、各タイルおよびポートレット自体の情報が定義されます。デフォルトの命名規則はstellent<portletname>dispatchです(例: stellentactivesearchdispatch.xml)。

CPSポートレットのエントリ・ポイントは、SCSPortletクラスです(コンテナによってこの実装が異なる場合があります)。このクラスにより、GenericPortletクラスが拡張されます。初期化時に、このクラスによって/WEB-INF/configディレクトリ内で構成ファイルが検索されます。

この項の項目は次のとおりです。

A.7.1 キーワード

次の特別なキーワードをビュー・ターゲットとして使用できます。

  • default: デフォルト・アクション・ノードの定義に従って、ポートレットのデフォルト・ページがレンダリングされます。ユーザーが編集モードの場合は、デフォルトの編集モード・ページが表示されます。

  • previous: スタックの前のページがレンダリングされます。

  • login: この名前のアクション・ノードを指定すると、新規ログインの検出時にフレームワークによってアクション・ハンドラが実行されます。

  • error: リクエストでスロー可能なエラーが発生したと想定されて、CPSによってデフォルトのエラー・ページが表示されます。このエラー・ページは、errorキーワードを使用して新規アクション定義を作成することでオーバーライドできます。

A.7.2 アクティブな検索ディスパッチ構成

アクティブな検索ディスパッチ構成のコーディング例を次に示します。

<portletdispatch-config>
<!--
Default action parameters, name for the default action, cacheResult is a
boolean that specifies whether the default behavior is to cache the action
result on the session. If the value is set to false, the action will be
performed each time the portlet is rendered, the result data is discarded
each time.

The cacheResult value here can be overriden by the action definition itself,
it the action does not specify, the default value is used.
-->

<default-action view="showHome" edit="showEdit" cacheResult="true"/>

<!--
Portlet-id is used to ensure that unique HTML form, javascript names are
used, this value will be available on the request object as
ISCSAction.PORTLET_ID
-->

<portlet-id value="active_search_portlet"/>

<!--
Definitions for all the action types available to this portlet
-->

<action-mappings>
  <forward name="showHome" authRequired="true" path="active.search.main.page"/>
  <forward name="showEdit" authRequired="true" path="active.search.edit.page"/>
    <location path="/WEB-INF/actions/active_search_actions.xml"/>
    <location path="/WEB-INF/actions/active_document_actions.xml"/>
</action-mappings>

<!--
Definitions for UI components available to this portlet
-->

<tiles-definitions>
  <definition name=".mainLayout" path="/stellent/ui/layouts/mainlayout.jsp">
    <put name="header" value="/stellent/ui/fragment/header.jsp"/>
    <put name="footer" value="/stellent/ui/fragment/footer.jsp"/>
    <put name="content" value="/stellent/ui/layouts/defaultContent.jsp"/>
  </definition>
  <location path="/WEB-INF/tiles/active_search_tiles.xml"/>
  <location path="/WEB-INF/tiles/active_document_tiles.xml"/>
</tiles-definitions>
</portletdispatch-config>

A.7.3 子ノードのタイプ

最上位ノードの<portletdispatch-config>には、デフォルト・アクション、ポートレットID、ロケーション、アクション・マッピングおよびタイル定義ノードというタイプの子ノードを含めることができます。

この項の項目は次のとおりです。

A.7.3.1 デフォルト・アクション・ノード

<default-action>ノードを使用して、ポートレットまたは編集モードへの初回アクセス時に実行するアクションまたは表示するタイルを指定します。これはまた、defaultキーワードが別のアクションのターゲットである場合に実行されるアクションになります。

view/edit属性: 表示/編集のデフォルトを指定します。この値は、定義済アクションとデフォルト編集アクションの名前になります。たとえば、定義済アクションのshowHomeとデフォルト編集アクションのshowEditになります。

cacheResult属性: アクションの結果をセッション上にキャッシュするか、render ()メソッドのコールごとに再実行するかを示します。ユーザーが他のポートレット上でアクションを実行すると、これによって自らの再描画をポートレットに指示するレンダリング・コールが生成されます。cacheResulttrueに設定されている場合は、この再描画ではアクションが再実行されるかわりにキャッシュされた結果が使用されます。アクティブなSearchポートレットの場合、これはデフォルトでtrueに設定されています。個々のアクションによってポートレットのデフォルトをオーバーライドでき、この値はアクション定義で指定されていない場合のみ使用されます。

A.7.3.2 ポートレットIDノード

<portlet-id>ノードを使用して、ポートレットの一意の名前を指定します。ここで指定した文字列値は、パラメータ名ISCSAction.PORTLET_IDを使用したリクエストで使用できます。このIDは主に、フォームやJavaScript関数などのHTML要素が同じページ上の他のポートレットと競合しないように、これらを一意に識別するために使用されます。

A.7.3.3 ロケーション・ノード

<location>ノードを使用して、定義をロードする別のディスパッチ構成ファイルを指定します。これにはパス属性を指定し、これによってロードする構成ファイルの検索場所が示されます。

このノードは、アクション・マッピング・ノードまたはタイル定義ノードの子になることが可能です。名前が競合する場合は、現在の構成XMLのアクション・マッピング定義が、ロードされたアクション定義より優先されます。

A.7.3.4 アクション・マッピング・ノード

<action-mappings>ノードは、通常はアクション・ノードによって定義されるアクション定義のコンテナです。2つの例外はフォワード・ノードとロケーション・ノードです。

アクション・ノード

<action>ノードによって、必要なアクションの実行に使用されるいくつかの属性を指定します。アクション定義の例を次に示します。

<!--
Shows the form to add new saved search.
-->

<action
  name="active.search.showAddSavedSearch"
  class="com.stellent.portlet.components.search.active.handlers.
        ShowAddSavedSearchHandler"
  bean="com.stellent.portlet.components.search.active.forms.
        AddSavedSearchForm"
  authRequired="true"
  addToStack="false">
  <forward name="success" path="active.search.savedsearch.add.page"/>
</action>

属性は次のとおりです。

  • name: アクションの名前。これは、JSPページ内でこのアクションを実行するときに使用されます。

  • class: ISCSActionHandlerインタフェースを実装するクラスの完全修飾クラス名。このクラスに、アクション・ハンドラ・コードを追加します。アクションの定義には、name属性とclass属性の両方が必要です。

  • bean: ISCSActionFormインタフェースを実装するクラスの完全修飾クラス名。handleActionメソッドがコールされると、これはアクション・ハンドラに渡されます。このbeanは、HTMLフォーム・ポストを通じて、または特殊なCPSポートレット・タグを使用した明示的定義によって、移入できます。これはオプション属性で、アクションに入力パラメータがまったく必要とされない場合は、この属性は省略できます。その場合は、handleActionに渡されるISCSActionFormはnullになります。

  • authRequired: 認証されていないポータル・ユーザーがアクションの実行を試みたときに、フレームワークによってアクションを実行するかどうかを制御します。これはオプション・パラメータで、デフォルトはfalseです。これがtrueに設定されている場合に、認証されていないポータル・ユーザーがアクションを実行しようとすると、特殊なシステムJSPページが表示され、ポートレットを使用する前にログインするようにユーザーに指示します。

  • addToStack: 再描画のためにrenderがコールされた場合、ポートレット・フレームワークによってこのアクションを再度実行するか、結果をキャッシュするかを定義します。デフォルトはtrueで、ポートレットでは再描画時に最新の状態が表示されます。しかし、一部のアクションは一度しか実行できません。そのため、フレームワークで結果を保存しないか、または結果を最終アクションとして記憶するかを定義できます。

<action>ノードはまた、任意の数のフォワード・アクションのコンテナになります。フォワード・アクションによって、アクション完了時にポートレットで表示されるタイルまたはJSPページを指定します。一意の名前を持つ異なるforwardsを必要な数だけこのリストに指定できます。アクション・ハンドラ・コード自体で、アクション完了時に使用するforwardを指定します。アクション完了時にフォワードするビュー名がハンドラによって明示的に示されていない場合、デフォルトはsuccess forwardになります。

これらのフレームワーク・プロパティに加え、任意の数のカスタム属性をアクション定義に指定できます。これらの属性は、ISCSActionHandler getAttributes()メソッドによってアクション・ハンドラで使用できます。たとえば、Contributionポートレットでは、カスタム・プロパティのasyncが追加されます。このカスタム・プロパティは、コントリビューションでJava Messaging Service (JMS)を利用して、ドキュメント・コントリビューションを非同期で実行するかどうかを示します。

フォワード・ノード

<forward>ノードは、特殊なタイプのアクションで、実際にコードは実行しませんが、指定のタイル定義または明示的JSPページ・ロケーションに自動的に表示をフォワードします。パス属性には、これらの値のいずれも指定できます。

A.7.3.5 タイル定義ノード

Tiles and Struts設計パターンでは、最終ビューの作成に使用されるメインJSPページ、コンテンツの様々な領域およびオプションのコントローラ・クラスを指定することで、特定ビューのレンダリング方法をフレームワークに指示します。

例:

<definition name=".mainLayout" path="/stellent/ui/layouts/mainlayout.jsp">
  <put name="header" value="/stellent/ui/fragment/header.jsp"/>
  <put name="footer" value="/stellent/ui/fragment/footer.jsp"/>
  <put name="content" value="/stellent/ui/layouts/defaultContent.jsp"/>
</definition>

これによって、名前.mainLayoutのタイルを定義し、JSPページ/stellent/ui/layouts/mainlayout.jspを、このビューをレンダリングするときに使用するメインJSPページに指定しています。メインJSPページが使用可能なコンテンツの領域を指定するプット・ノードに注意してください。この例では、ヘッダー、フッターおよびコンテンツ領域の3つの領域を使用できます。これらの各プット・ノードによって、領域の名前と領域のレンダリングに使用する対応するJSPページが指定されます。

また、次の定義のように、タイル定義のコントローラを指定し、継承を指定できます。

<definition name="active.search.edit.page" extends=".mainLayout"
  controllerClass="com.stellent.portlet.components.search.active.
  controllers.EditController">

<put name="content" value="/stellent/ui/layouts/search/active/
  active_search_edit.jsp"/>
</definition>

このタイルは、以前に定義した.mainLayoutタイルを拡張するもので、その構成が継承されます。ここでは、controllerClassをこのタイルに追加しています。controllerClassは、ISCSControllerインタフェースを実装して処理が必要な状況でタイルがレンダリングされる前にJavaコードを実行するフックを提供するオブジェクトです。このタイル定義によってcontent領域がオーバーライドされ、この領域のレンダリングに使用されているJSPページが変更されることに注意してください。

A.8 ポートレットAPIファサードへの参照の取得

次のように、JSPページを通してアクション定義が呼び出されます。

<form name="subAuthSearch" method="POST" onSubmit="prepareAuthScsSearch()"
    action='<scsportlet:createURI><scsportlet:URIAction
    value="active.search.doSearch"/>
    </scsportlet:createURI>'>

この例では、フォームが送信されたときに、CPSタグcreateURIによってactive.search.doSearchアクションが呼び出されます。アクションactive.search.doSearchは、構成ファイルで作成されたアクション定義にマッピングします。詳細は、第A.7.3.4項「アクション・マッピング・ノード」を参照してください。

アクション定義はクラス名を指定します。クラス名は、 ISCSActionHandlerインタフェースを実装するオブジェクトになります。このインタフェースでは、オブジェクトを行使するためにフレームワークによって使用される様々なメソッドを実装できます。ただし、抽象ベース・クラスのSCSActionHandlerを拡張すると、開発者は1つのメソッドのみを実装すれば済みます。

/**
  * Handle an action from the portlet
  * @param portletRequest
  * @throws com.stellent.portlet.dispatcher.PortletDispatcherException
*/
public ISCSActionResult handleAction (ISCSActionForm form,
  Object portletRequest)
  throws PortletDispatcherException, IdcClientException, RemoteException;

このメソッドは、ポートレット・フレームワークを通してアクションが呼び出されるたびにコールされます。メソッドは、このアクションが使用できるパラメータを表すbeanである、ISCSActionFormで渡されます。

このクラスは、アクション・ノードで指定されたタイプになります。

handleActionメソッド内では、アクション・ハンドラは、getIdcClient()メソッドを通して、初期化済のIdcClientオブジェクトを使用できます。同様に、getAttributes()メソッドを通して、アクション・ノードで指定された他のすべての属性を使用できます。また、getID()メソッドを通して、このハンドラの一意のIDにアクセスできます。これを使用すると、競合なしでセッションの情報を格納できます。

戻りタイプはアクション結果オブジェクトです。通常、これは単純に、JSPページ内でのアクセスのリクエストに格納される結果パラメータのコンテナです。ただし、戻り時に使用されるビューなど、この結果に対して他のパラメータを指定できます。ベース・クラスSCSActionResultを使用する場合、デフォルトはsuccessになります。

サンプル・アクション・ハンドラ

アクション定義で、アクション active.document.checkOut、アクションを実行するISCSActionHandlerクラス、ハンドラに渡されるパラメータを表すbeanであるISCSActionFormおよびアクション完了時に表示される結果のタイルを指定します。

<!--
Attempts to check out the specified document.
-->

<action
  name="active.document.checkOut"
  class="com.stellent.portlet.components.document.
        active.handlers.CheckOutHandler"
  bean="com.stellent.portlet.components.document.
       active.forms.CheckOutForm"
  authRequired="true" >

  <forward name="success" path="active.document.checkout.page"/>
</action>

SCSActionFormコードは、checkoutハンドラがそのアクションを完了するために必要とするパラメータを示します。次の例では、チェックアウトするドキュメントのドキュメントIDのみがcheckoutで必要とされます。

public class CheckOutForm extends SCSActionForm {
  private String m_documentID;

  public String getDocumentID () {
    return m_documentID;
    }

  public void setDocumentID (String documentID) {
     m_documentID = documentID;
  }
}

SCSActionHandlerコードでは、渡されたフォームがCheckOutFormのインスタンスであるかどうかが最初にチェックされます。そうでない場合は、エラーが発生します。それ以外の場合は、コンテンツ・サーバーのCHECKOUTサービスをコールすることで、RIDC APIを通してファイルがチェックアウトされます。結果のレスポンス・オブジェクトは、result.setVariable(name,object)をコールすることでリクエストに置かれます。これらのオブジェクトは、ビューをレンダリングするJSPページで使用可能になります。

public class CheckOutHandler extends SCSActionHandler {
/**
* Checks out the specified content.
*
* @param portletRequest
* @throws com.stellent.portlet.dispatcher.PortletDispatcherException
*/
public ISCSActionResult handleAction (ISCSActionForm form, Object portletRequest)
throws PortletDispatcherException, IdcClientException, RemoteException {
ISCSActionResult result = new 
SCSActionResult ();

// Checking of Form Instance.
if (form instanceof CheckOutForm) {
CheckOutForm cof = (CheckOutForm)form;

//The IdcClient Object and the Context.
IdcClient client = getIdcClient();
IdcContext ctx = SCSSession.getSCSContext(portletRequest);

// Content Server Service executed using RIDC API for Checking Out a document.
DataBinder chkoutBinder = client.createBinder ();
chkoutBinder.putLocal ("IdcService", "CHECKOUT");
chkoutBinder.putLocal ("dID", cof.getDocumentID ());
ServiceResponse response = client.sendRequest (ctx, chkoutBinder);
DataBinder checkoutBinder = response.getResponseAsBinder ();

// Service Executed for getting Document Information.
DataBinder docBinder = client.createBinder ();
docBinder.putLocal ("IdcService", "DOC_INFO");
docBinder.putLocal ("dID", cof.getDocumentID ());
ServiceResponse docresponse = client.sendRequest (ctx, docBinder);
DataBinder docDataBinder = docresponse.getResponseAsBinder ();
DataResultSet docData = docDataBinder.getResultSet ("DOC_INFO");
List docDataRows = docData.getRows ();
DataObject dobj = (DataObject)docDataRows.get(0);

//Result put on the request and sent to the JSP Page.
result.setVariable ("checkoutResponse", checkoutBinder);
result.setVariable ("infoResponse", dobj);
} else {
throw new PortletDispatcherException ("Unexpected form type,
expected 'CheckOutForm', got " + form);
}
return result;
}

A.9 タイルの作成

タイルは、定義、オプションのコントローラ・クラスおよびポートレット・ビューを作成する一群のJSPクラスから構成されます。定義セクションには、メイン・レイアウトのJSPページを識別するXMLコードが含まれます。

次の例では、3つのJSPページを参照する3つの異なる領域が指定されています。

<%@ include file="/stellent/ui/fragment/jspimport.inc" %>
<scsportlet:insert name="header"/>
<scsportlet:insert name="content"/>
<scsportlet:insert name="footer"/>

先頭のincludeには、一般に定義されるimportとtaglib定義が含まれます。これはポートレット用のファイルの例です。

<%@ page import="com.stellent.portlet.api.IPortletAPIFacade" %>
<%@ page import="com.stellent.portlet.api.PortletAPI" %>
<%@ include file="/stellent/ui/fragment/page.inc" %>
<%@ taglib uri="/WEB-INF/tlds/i18n.tld" prefix="i18n" %>
<%@ taglib uri="/WEB-INF/tlds/scsportlet.tld" prefix="scsportlet" %>
<%@ taglib uri="/WEB-INF/tlds/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/tlds/scs-databinder.tld" prefix="db" %>

<%
  //the api facade class
  IPortletAPIFacade apiFacade = PortletAPI.getInstance ().getPortletAPIFacade ();
%>

JSPページでは、最初にヘッダー、次にコンテンツ、最後にフッターを配置するようにビューに指示するために、3つの行でinsertタグが使用されています。それぞれの領域について、定義を検索してinsertタグによって指定されたJSPページを含めるように、insertタグはフレームワークに指示しています。

A.10 コントローラの作成

コントローラは、タイル自体がレンダリングされる前にタイル作成者がJavaコードを実行できるようにするフックです。コントローラを作成するには、ISCSControllerクラスを実装する必要があります。このクラスでは、ポートレット・フレームワークがその存続期間を制御するために使用するいくつかのメソッドが必要とされます。

ほとんどの場合、抽象ベース・クラスのSCSControllerによって、必要なすべての操作が実行されます。ただし、次は例外となります。

/**
  * Method is called before a Tile is rendered.
  *
  * @param portletRequest The portlet request that generated the Tile render.
  * @param portletResponse The portlet response associated with Tile render
  * @throws ServletException If a portlet container error occurs.
  * @throws IOException If a portlet container error occurs.
  * @throws IdcClientException If a RIDC framework error occurs.
  * @throws RemoteException If a RIDC communication error occurs.
  */

public void perform (Object portletRequest,
       Object portletResponse)
       throws ServletException, IOException, IdcClientException, RemoteException;

このメソッドはタイルがレンダリングされる直前にコールされ、リクエスト上に配置するすべてのオブジェクトは、結果のJSPページで使用可能になります。