2. プログラミング・開発ガイド

2.1. ポートレットとは

ポートレットとは、ウェブポータルで管理・表示される着脱可能なユーザインタフェースコンポーネントです。ポートレットはマークアップコードの断片を生成して、それがポータルページに集められます。典型的には、ポータルページは互いにオーバーラップしないポートレットウィンドウの集合体を表示するもので、各ポートレットウィンドウはポートレットを表示します。したがってポートレットはポータルにホスティングされたウェブアプリケーションとでも言うべきものです。ポートレット・アプリケーションの例としては、電子メール、天気レポート、議論フォーラム、ニュースなどがあります。

2.2. ポートレット開発の概要

2.2.1. ポートレット開発の流れ

WebOTX Developer を利用したポートレット開発は以下のような流れになります。
  1. ポートレットプロジェクトウィザードもしくは動的Webプロジェクトから変換することでポートレットプロジェクトを作成します。
  2. ポートレットウィザードで各ポートレットテンプレートを生成します。
  3. 生成された雛形をベースに各機能を実装します。
  4. 作成したポートレットアプリケーションをWARファイルにアーカイブします。
  5. WARファイルをポータルサーバへ配備します。
  6. 配備したポートレットをポータルページへ追加して実行します。

2.3. ポートレットプロジェクト

ここでは、 ポートレットプロジェクト ウィザードの操作方法を説明します。

2.3.1. ポートレットプロジェクトの作成

2.3.1.1. ウィザードの起動

メニューの ファイル新規プロジェクト を選択すると、 新規プロジェクト のダイアログが表示されます。
ウィザードを選択ページポータルポートレットプロジェクト を選択し、 次へ をクリックすると、ウィザードが起動され、 ポートレットプロジェクト ページが表示されます。


図2.3.1.1-1


2.3.1.2. ポートレットプロジェクトの基本情報設定

ポートレットプロジェクト ページでプロジェクトを作成するための基本的な設定を行います。


図2.3.1.2-1


このページについて説明します。

[プロジェクト名]

作成するプロジェクト名を指定します。

[プロジェクト・コンテンツ]

プロジェクトの保存先をデフォルト以外の場所に変更する場合に指定します。デフォルト設定は開いているワークスペースになります。

[ターゲット・ランタイム]

実行するサーバー・ランタイム環境を指定します。ポータルサーバのランタイムを指定します。

[動的Webモジュールバージョン]

作成する web.xml のバージョンを指定します。2.4、2.5 または 3.0 が選択できます。

[構成]

ターゲットランタイムで ポータルサーバ を選択時、 構成で WebOTX Portal 構成 デフォルト表示されます。
構成 グループでの 変更 をクリックすると、 プロジェクト・ファセット ページが表示されます。


図2.3.1.2-2


WebOTX Portal のデフォルト構成及びポートレットプロジェクト構成では、 JavaJSR Portlet動的Webモジュール がチェックされており、 且つこのチェックボックスは外せません。他のファセットについては、ここで追加することもできます。 OK をクリックすると、 ポートレットプロジェクト ページへ戻ります。


図2.3.1.2-3


プロジェクト・ファセット ページについて説明します。
表2.3.1.2-1
項目 説明
動的Webモジュール 必須。プロジェクトがDynamic Web Moduleとして配備されることを可能にします。
Java 必須。Javaのサポートを可能にします。
JSR ポートレット 必須。JSRポートレットのサポートを可能にします。

[EARメンバーシップ]

EARプロジェクトに作成するポートレットプロジェクトを含めるかどうかを指定します。含めたい場合、ONにします。

[ポートレットバージョン]

作成するポートレットが準拠するバージョンを指定します。デフォルトは V2.0(JSR 286) です。

生成されたプロジェクトの構成を下図に示します。


図2.3.1.2-4


作成されるディレクトリ構成について、下表で説明します。
表2.3.1.2-2
項目 説明
ポートレットプロジェクト プロジェクトのルートディレクトリです。この配下で作業をします。
src ポートレットプロジェクトのソースフォルダです。ポートレットアプリケーションで利用するポートレットやJavaファイルなどをパッケージ構成で格納します。
WebContent コンテキストディレクトリです。プロジェクト作成時に、任意のディレクトリに変更することができます。
MANIFEST.MF マニフェストファイルです。このファイルでは Portal Tool のバージョンが記述されています。
WEB-INF Webアプリケーションの隠蔽ディレクトリです。この配下にあるリソースは、クライアント(WEBブラウザ)からアクセスすることはできません。Webアプリケーション・プログラムが利用する定義ファイルなどを格納します。
lib 開発するポートレットアプリケーションで利用するライブラリ(JARファイル)を格納するフォルダです。
tld WebOTX Portal サーバで利用するポートレット用のtldファイルを格納するフォルダです。
nec-web.xml WebOTXアプリケーションサーバー用のデプロイメント記述子ファイルです
portlet.xml ポートレットとポートレット関連の構成情報をすべて定義した ポートレットデプロイメント記述子ファイルです。
web.xml Webアプリケーションのデプロイメント記述子ファイルです。

Memo
XMLファイル、JSPファイルの作成時のエンコードの設定方法については、環境設定の1.2.6. エンコード設定 を参照してください。

2.3.2. ポートレットプロジェクトの構成

2.3.2.1. フォルダ/ファイル構成

2.3.2.2. プロジェクト・エクスプローラ・ビューの説明

ポートレットの開発環境で、WebOTX Developer のプロジェクト・エクスプローラ・ビューを拡張してポートレットの表示、ポートレットデプロイメント記述子ファイル(portlet.xml) のインポートの機能を提供しています。
プロジェクト・エクスプローラ・ビューの構成


図2.3.2.2-1


表2.3.2.2-1
画面要素 説明
ビュー プロジェクトの構成がツリー構造で表示されます。
ビューツールバー 便利なツール(リンク、縮小など)を提供します。
ビュータブ 最大化・クローズなどができます。
ビューツールバーとビュータブは変更ありませんが、ビューは以下の通り拡張されています。
ビュー内の画面要素について、以下の仕様に従います。


図2.3.2.2-2



図2.3.2.2-3


プロジェクト・エクスプローラ・ビュー上に以下の2つのノードを追加します。
ポートレットデプロイメント記述子ノード
ポートレットデプロイメント記述子ファイルに下記の太字部分の記述があります。
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app version="x.x" …>
        …
</portlet-app>

ポートレットデプロイメント記述子バージョンの判定は以下の通りです。 ポートレットデプロイメント記述子がv1.0である場合、以下の例で示すように<portlet>要素をポートレットノードにします。


図2.3.2.2-4


ポートレットデプロイメント記述子ファイルを解析して、ポートレットのみの子ノードを表示します。


図2.3.2.2-5


プロジェクトの直下に ポートレットデプロイメント記述子:プロジェクト名※ ノードが表示されます。初期状態は展開していない状態になります。
※当該ポートレットプロジェクト名を示します。
その直下には<portlet>要素を列挙します。表示名は<portlet>要素の<portlet-name>子要素の値です。
表2.3.2.2-2
要素 子要素 表示名 アイコン
<portlet> 「ポートレットデプロイメント記述子:」文字列の後ろにプロジェクト名を表示します。

<portlet-name> <portlet-name>要素の値を表示します。

ポートレットデプロイメント記述子がv2.0である場合、以下の例で示すような各要素をノードにします。


図2.3.2.2-6


ポートレットデプロイメント記述子ファイルを解析して、以下のようなノードを表示します。


図2.3.2.2-7


プロジェクトの直下に ポートレットデプロイメント記述子:プロジェクト名※ノードが表示されます。初期状態は展開していない状態になります。
※当該ポートレットプロジェクト名を示します。
その直下には以下の要素を列挙します。
・  <event-definition>
・  <filter>
・  <public-render-parameter>
・  <portlet>
該当する表示名は以下とします。
・  イベント
・  フィルター
・  パブリックレンダーパラメータ
・  ポートレット
イベントの直下には<event-definition>要素の表示名はイベント名です。
イベント名の取得は二つの場合があります。
名前空間の指定がある場合、以下に示すような表示名とします。
<event-definition xmlns:接頭辞="名前空間">
  <qname>接頭辞:イベント名</qname>
  <value-type>イベントペイロードの型</value-type>
</event-definition>

名前空間の指定がない場合、以下に示すような表示名とします。
<event-definition>
  <name>イベント名</name>
  <value-type>イベントペイロードの型</value-type>
</event-definition>

フィルターの直下には<filter>要素の<filter-name>要素の値を表示します。
パブリックレンダーパラメータの直下には<public-render-parameter>要素の<identifier>要素の値を表示します。
ポートレットの直下には以下の要素を列挙します。
・  <supported-publishing-event>
・  <supported-processin-event>
・  <supported-public-render-parameter>
<supported-publishing-event>ノードの表示名はイベント名です。
イベント名の取得は二つの場合があります。
名前空間が指定されている場合、以下に示すような表示名とします。
<supported-publishing-event xmlns:接頭辞="名前空間">
    <qname>接頭辞:イベント名</qname>
</supported-publishing-event>

名前空間が指定されていない場合、以下に示すような表示名とします。
<supported-publishing-event>
    <name>イベント名</name>
</supported-publishing-event>

<supported-processing-event>ノードの表示名は< supported-publishing-event >ノードと同じくイベント名です。
イベント名の取得は二つの場合があります。
名前空間の指定が指定されている場合、以下に示すような表示名とします。
<supported-processing-event xmlns:接頭辞="名前空間">
    <qname>接頭辞:イベント名</qname>
</supported-processing-event>

名前空間の指定が指定されていない場合、以下に示すような表示名とします。
<supported-processing-event>
    <name>イベント名</name>
</supported-processing-event>

<supported-public-render-parameter>ノードの表示名は<identifier>要素の値を表示します。
表2.3.2.2-3
要素 子要素 子要素 表示名 アイコン
<portlet-app> 「ポートレットデプロイメント記述子:」文字列の後ろにプロジェクト名を表示します。

<event-definition> 「イベント」を表示します。

<q-name> q-name要素の値を表示します。

<filter> 「フィルター」を表示します。

<filter-name> filter-name要素の値をを表示します。

<public-render-parameter> 「パブリックレンダーパラメータ」を表示します。

<identifier> identifier要素の値を表示します。

<portlet> 「ポートレット」を表示します。

<supported-publishing-event> supported-publishing-event のq-name要素の値を表示します。

<supported-processing-event> supported-processing-event のq-name要素の値を表示します。

<supported-public-render-parameter> supported-public-render-parameter要素の値を表示します。

プロジェクト・エクスプローラ・ビューの操作
プロジェクト・エクスプローラ・ビューはコンテキスト・メニューで「ポートレット参照」の操作を提供しています。
「ポートレット参照」ノードを右クリックすると以下のメニューを表示します。


図2.3.2.2-8


「ポートレットアプリケーション」ノードを右クリックすると以下のメニューを表示します。


図2.3.2.2-9



[ポートレット参照の追加]

コンテキスト・メニューで「ポートレット参照の追加」をクリックすると、ポートレット参照ウィザードを表示します。
 

Memo
ポートレットプロジェクトの右クリックメニューから ポータル > ポートレット参照 を選択した場合と同じ挙動をします。「ポートレット参照の利用」を参照してください。



[ポートレット参照の削除]

ポートレット参照の削除では、ポートレット参照の配下の該当する「アプリケーション」ノード並びに「reference」フォルダの配下のアプリケーションを削除します。確認メッセージは1回表示されます。
はい をクリックすると、選択したアプリケーションが削除されます。
プロジェクト・エクスプローラ・ビューで当該「アプリケーション」ノードも削除します。


図2.3.2.2-10



[ポートレット参照の全削除]

ポートレット参照の配下の全てのアプリケーションノード並びに「reference」の配下のアプリケーションに対して削除します。確認メッセージは1回表示されます。


図2.3.2.2-11


2.4. ポートレットウィザードの利用

WebOTX Developer ではポートレットを簡単に作成できるようにポートレット作成ウィザードを提供しています。ポートレット作成ウィザードの操作を説明します。

2.4.1. ポートレットウィザードの起動

以下の2つ方法でウィザードを起動することができます。
【起動方法1】
メニュー ファイル新規その他 をクリックすると、 ウィザードを選択 ページ が表示されます。
ウィザードを選択ページポータル >   ポートレット を選択し、 次へ をクリックすると、ウィザードが起動されます。


図2.4.1-1


【起動方法2】
右メニュー ポータルポートレットの作成 をクリックすると ウィザードが起動されます。


図2.4.1-2


2.4.2. ポートレットの作成ページ

作成するポートレットのクラス情報等を設定するページです。


図2.4.2-1


ポートレットの作成 ページについて説明します。

[プロジェクト名]

ポートレットを生成するポートレットプロジェクトを選択します。

[ポートレット名(必須項目)]

生成するポートレットのポートレット名を指定します。

Caution
ポートレット名に下記の文字は使えません。
• 空白
• 特殊文字(` ~ ! @ # % ^ & * ( ) - + = { [ } ] | \ : ; " ' < , > . ? /等)
• Latin-1 (ISO 8859-1)以外の文字(日本語等)
• 1文字目が数字



[ポートレット型]

生成する ポートレット型 を選択します。以下の二つのパターンから選択することができます。
各ポートレット型について説明します。
表2.4.2-1
ポートレット型 説明
シンプルポートレット Java Portlet APIに準拠したシンプルなJavaポートレットです。
JSP/HTMLポートレット portlet.xmlの初期パラメータにView用/Edit用/Help用それぞれのJSPファイルまたはHTMLファイルを指定し、指定されたJSP/HTMLファイルをそのまま実行する汎用ポートレットです。
JSPファイルの編集によって、さまざまな機能を提供可能であり、JSPを使用したポートレットを新規開発する際のベースとなります。
コンテンツ表示ポートレット WebOTX Portal に同梱されているコンテンツ表示ポートレット(Iframe形式)を元にした カスタムのコンテンツ表示ポートレットです。

[ユーザ定義クラス]

ポートレットをユーザ定義クラスで作成することを指定します。現在は変更することはできません。


[ソース・フォルダー]

ソース・フォルダーを選択することができます。

ソース・フォルダーの選択 ソース・フォルダーを指定し、 OKをクリックすると、 ポートレットの作成ページに戻り指定したソース・フォルダーが反映されます。


図2.4.2-2

[パッケージ(必須項目)]

作成するポートレットクラスが属するパッケージ名を指定します。パッケージはテキスト入力または選択することができます。
参照 をクリックすると、 パッケージ選択 ダイアログが表示されます。


図2.4.2-3


パッケージ選択 ダイアログでパッケージを指定し、 OKをクリックすると、 ポートレットの作成 ページに戻り指定したパッケージが反映されます。


図2.4.2-4



[クラス名(必須項目)]

作成するポートレットクラスの名前を指定します。

[スーパークラス]

作成するポートレットクラスのスーパークラスを指定します。デフォルト値は javax.portlet.GenericPortlet です。
スーパークラス の右側の 参照 をクリックすると、 スーパークラス選択 ダイアログが表示されます。


図2.4.2-5


スーパークラス選択 ダイアログでスーパークラスを指定し、 OK をクリックすると、 ポートレットの作成 ページに戻り指定したスーパークラスが反映されます。


図2.4.2-6

Memo
スーパークラスは javax.portlet.GenericPortlet を継承したクラスを指定してください。


ポートレットの作成 ページから 次へ をクリックすると、 ポートレットの基本情報設定 ページが表示されます。


図2.4.2-7


2.4.3. ポートレットの基本情報設定ページ

ポートレットモードや言語情報等のポートレット関する基本的な設定を行うページです。


図2.4.3-1


ポートレットの基本情報設定ページについて説明します。

[コンテンツタイプ及びモード]
表2.4.3-1
項目 説明
コンテンツ・タイプ 変更不可項目です。
ポートレットがサポートするコンテンツタイプの種別です。
値:text/html
表示 変更不可項目です。
表示(View)モードをサポートするか指定します。 表示(View)モードはポートレットではサポート必須のため、常にONになります。
値:ON
個人設定 変更可能項目です。
編集(Edit)モードをサポートするか指定します。
デフォルト値:OFF
ヘルプ 変更可能項目です。
ヘルプ(Help)モードをサポートするか指定します。
デフォルト値:OFF
説明 変更可能項目です。
説明(About)モードをサポートするか指定します。
デフォルト値:OFF
共用設定 変更可能項目です。
共用設定(Edit_Defaults)モードをサポートするか指定します。
デフォルト値:OFF

[ロケール設定情報]

ロケール設定情報のテーブルについて説明します。
表2.4.3-2
項目 説明
ロケール ポートレットでサポートする言語情報です。デフォルトはdefaultのみがONになります。default は変更はできません。 以下の言語をサポートします。
  • ja(日本語)
  • en(英語)
ロケール情報 言語情報です。ロケール名を表示します。
タイトル 各言語でのタイトルです。デフォルトは指定したポートレット名になっています。
追加 をクリックすると、 ロケール情報の追加 ダイアログが表示されます。


図2.4.3-2



図2.4.3-3


ロケール情報の追加 ダイアログについて説明します。
表2.4.3-3
項目 説明
ロケール ロケールを指定します。次のロケールを指定することが可能です。
  • ja(日本語)
  • en(英語)
タイトル ロケールのタイトルが指定できます。
ショートタイトル ロケールのショートタイトルが指定できます。
キーワード ロケールのキーワードが指定できます。
ロケール情報を指定し、 OK をクリックすると、 ポートレットの基本情報設定 ページに戻ります。

Memo
追加されたロケールはロケール設定情報テーブルで表示され、有効になります。また、タイトル、ショートタイトル、キーワードは設定しても、WebOTX Portal V9では表示されません。


ロケール情報テーブルにある行を選択し、 編集 をクリックすると、 ロケール情報の編集 ダイアログが表示されます。


図2.4.3-4



図2.4.3-5


ロケール情報の編集 ダイアログについて説明します。
表2.4.3-4
項目 説明
ロケール 選択したロケールを表示します。編集不可。
タイトル ロケールのタイトルが編集できます。
ショートタイトル ロケールのショートタイトルが編集できます。
キーワード ロケールのキーワードが編集できます。

ロケール情報を編集し、 OK をクリックすると、 ポートレットの基本情報設定 ページに戻ります。
ポートレットの作成 ページで JSP/HTMLポートレット を選択した場合、 ポートレットの基本情報設定 ページから 次へ をクリックすると、 オプションページが表示されます。


図2.4.3-6


2.4.4. オプションページ

生成するポートレットの雛形に特定機能の追加設定を行うページです。


図2.4.4-1


Memo
ポートレット型シンプルポートレットを指定した場合、オプションページへ遷移すること ができません。
JSP/HTMLポートレットコンテンツ表示ポートレットを指定した場合、 オプションページへ遷移することができます。

オプション ページについて説明します。

ポートレットバージョン、ポートレット型と各オプションの組み合わせで利用できる関係を以下に示します。
○ の組み合わせで利用することができます。
規格 ポートレット型 表示切り替え D&D 機能 Ajax 機能 SWF 呼び出し
V1.0(JSR168) シンプル × × × ×
JSP/HTML × ×
コンテンツ表示 × × ×
V2.0(JSR286) シンプル × × × ×
JSP/HTML
コンテンツ表示 × × ×

[表示モード切替]

最大化標準切替に設定ON にすると、最大化ウィンドウ状態と標準ウインドウ状態で 異なるJSPファイルを表示する設定が追加されます。
詳細は ポートレットウィンドウ状態を利用した表示切替の作成 を参照して下さい。

[D&D機能]

Drag機能を追加Drop機能を追加ON にすることで、Drag、Drop機能の設定が追加されます。
D&Dの詳細は ドラックアンドドロップ(D&D)を利用したポートレット間連携の作成 を参照して下さい。
項目 説明
Drag機能を追加 Dragソースの設定が生成するポートレットの雛形に追加されます。
Drop機能を追加 Dropターゲットの設定が生成するポートレットの雛形に追加されます。
連携の方式のは以下の2通りあります。
項目 説明
クライアント側のみで連携 クライアント側(ブラウザ)上のみで連携する方式です。
ブラウザに表示されている文字列をテキストボックスにドロップする場合等に利用できます。
クライアント側とサーバ側で連携 クライアント側とサーバ側で連携する方式です。
クライアント側で受け渡すデータを元にサーバ側で処理を行う場合に利用します。

[Ajax機能]

Ajax機能の追加ON にすると、Ajaxを利用した非同期更新の設定が追加されます。
詳細は Ajax を利用した部分更新の作成 を参照して下さい。

[SWF アプリの呼び出し]

SWF アプリケーションの呼び出し機能を追加ON にすると、 SWF アプリケーションを利用する設定が追加されます。
詳細は SWFアプリケーションを利用したポートレットの作成 を参照して下さい。

ポートレット型 コンテンツ表示ポートレット を選択している場合、 次へ をクリックすることができます。


図2.4.4-2


2.4.5. コンテンツ表示ポートレットの基本情報設定ページ

コンテンツ表示ポートレットに特有な設定を行うページです。
コンテンツ表示ポートレットの詳細は 他システム連携ポートレットの作成 を参照して下さい。


図2.4.5-1

Memo
ポートレット型コンテンツ表示ポートレットを指定した場合に遷移することができます。


コンテンツ表示ポートレットの基本情報設定 ページについて説明します。

[コンテンツのURL]

コンテンツ表示ポートレットで表示するコンテンツのURLを指定します。

[ポートレットの高さ]

ポートレットの高さを指定します。

[スクロールバーの表示]

スクロールバーの表示を指定します。auto:自動 yes:表示 no:表示しない

[実装方式]

表2.4.5-1
項目 説明
IFrameポートレット形式 IFrame形式のベースクラスを元にしたシステムコンテンツ表示ポートレットです。

Caution
ポートレット型コンテンツ表示ポートレットを指定した場合、 ポートレットウィザード生成後に実行環境からJARファイルをプロジェクトにコピーする必要があります。
詳細は 他システム連携ポートレットの作成 を参照して下さい。


2.5. 基本的なポートレットの実装

2.5.1. JSR 168 と JSR 286

JSR 168 はJava プラットフォーム向けの ポートレットの仕様です。
JSR 286 は JSR 168 の後継仕様で、イベントやフィルターなどの仕様が追加されています。

2.5.2. ポートレットデプロイメント記述子

ポートレットデプロイメント述子( portlet.xml )では、ポートレットコンテナによるポートレットの実行に必要なメタ情報を記述します。
ポートレットコンテナは、ポートレットデプロイメント記述子中のポートレット定義ごとに、該当するクラスのオブジェクトを 1 つインスタンス化し、 そのポートレットに対するすべての要求を仲介します。
これはサーブレットコンテナの動作と同じです。
以下にポートレットデプロイメント述子( portlet.xml )の例を示します。
<portlet-app>
  <portlet>
    <portlet-name>TestPortlet</portlet-name>
    <portlet-class>com.nec.webotx.TestPortlet</portlet-class>
    <init-param>
      <name>TestName</name>
      <value>TestValue</value>
    </init-param>
    <supports>
      <mime-type>text/html</mime-type>
      <portlet-mode>view</portlet-mode>
      <portlet-mode>help</portlet-mode>
    </supports>
    <portlet-info>
      <title>TestPortlet</title>
    </portlet-info>
  </portlet>
</portlet-app>

2.5.3. ポートレット インタフェース

ポートレットは JSR 168 / JSR 286 で定義されている javax.portlet.GenericPortlet クラスを継承して作成します。
その中のいくつかのポートレットインターフェイスを紹介します。

2.5.4. ポートレットモード

ポートレットにはポートレットモードと呼ばれる状態があります。ポートレットモードには 標準ポートレットモードカスタムポートレットモードがあります。
標準ポートレットモード は JSR 168 / 286 で規定されているモードで JSR 168 / 286 に準拠しているポータルサーバであれば、 必ずサポートされているポートレットモードです。
カスタムポートレットモード はポータルサーバ独自にサポートしているモードです。
WebOTX Portal では以下のポートレットモードをサポートしています。
表2.5.4-1
種別 モード名 説明 実装方法
標準ポートレットモード 表示(View) ポートレットが必ずサポートしなければならないモードです。通常の表示状態を表します。 GenericPortletクラスのdoView()メソッドをオーバーライドします。
個人設定(Edit) 任意のポートレットモードです。ポータルサーバにログインしてる各個人ごとの設定を行う場合に利用するモードです。 GenericPortletクラスのdoEdit()メソッドをオーバーライドします。
ヘルプ(Help) 任意のポートレットモードです。ポートレットの操作方等、ポートレットに関するヘルプ情報を提供する場合に利用します。 GenericPortletクラスのdoHelp()メソッドをオーバーライドします。
カスタムポートレットモード 説明(About) 任意のポートレットモードです。ポートレットの作成者や概要説明等のポートレットに関する情報を提供する場合に利用します。 @RenderMode 等を利用して実装します。
共用設定(Edit_Defaults) 任意のポートレットモードです。各作成ポートレットで共通の設定を行う場合に利用します。 @RenderMode 等を利用して実装します。

以下にポートレットモードを実装する例を示します。
public class HelloPortlet extends javax.portlet.GenericPortlet {
    public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        //表示モードを実装する
    }
    public void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        //個人設定モードを実装する
    }
    public void doHelp(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        //ヘルプモードを実装する
    }
    @RenderMode(name = "about")
    public void doAbout(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        //説明モードを実装する
    }
    @RenderMode(name = "edit_defaults")
    public void doEditDefaults(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        //共用設定モードを実装する
    }
}

2.5.5. ポートレットプリファレンス

ポートレットプリファレンスはポートレットアプリケーション内で利用するデータをデータベースに永続化し保持する仕組みです。
また、ポートレットプリファンレンスでは内部で利用しているユーザ毎に格納場所を分けており、ポートレットプリファレンスを利用することで容易にパーソナラゼイションを実現できます。
ここでは、ポートレットプリファレンスについて詳しく説明します。
・  ポートレット プリファレンスの指定
・  プリファレンス API の使用

Caution
ポートレットプリファレンスではトランザクション機能等は備えていないため機密性や信頼性の高い情報の保存には適していませんので、 それらのデータの保存には利用することは避けて下さい。

2.5.5.1. ポートレットプリファレンスの取得と設定

ポートレットプリファレンスは各関数の引数で渡される PortletRequest から取得します。
リクエストからポートレットプリファンレンスを取得し、getValue 関数でプリファレンス値を取得、setValue 関数でプリファレンスを設定します。 下記例では、 KEYNAME というキー名の値を取得していて、 PEF_KEY というキー名で 「value」という値を保存しています。
また、実際にデータベースに保存されるタイミングは、store 関数を呼び出した時になるため、プリファレンスを保存する場合は必ず store 関数を実行する必要があります。
public void processAction(ActionRequest request, ActionResponse response) throws IOException {
   // プリファレンスオブジェクトの取得
   PortletPreferences prefs = request.getPreferences();

   //プリファレンスの取得
   String data = prefs.getValue("KEYNAME", "");
   
   // プリファレンスの設定
   prefs.setValue("PEF_KEY", "value");
   
   // プリファレンスの永続化
   prefs.store();
}
Memo
ポートレットプリファレンスの参照は全ての関数で可能ですが、作成や更新は特定の関数でのみ実施できます。 プリファレンスを作成・更新できる関数は以下の関数または該当関数からの呼び出し先になります。

2.5.5.2. ポートレットプリファレンスの初期設定

ポートレット仕様に従ってポートレットデプロイメント記述子(portlet.xml)にポートレットプリファレンスを指定し初期化することができます。
ポートレットプリファレンスの指定は以下の通りです。
<portlet>
    <portlet-name>RefreshPortlet</portlet-name>
    <portlet-class>com.nec.portlet.RefreshPortlet</portlet-class>
    <portlet-preferences>
        <preference>
            <name>KEYNAME</name>
            <value>value</value>
            <read-only>false</read-only>
        </preference>
    </portlet-preferences>
</portlet>

2.5.5.3. ポートレットプリファレンス API

ポートレットプリファレンスの関数の一例を以下に示します。
表2.5.5.3-1
メソッド 説明
String getValue(String name, String default) プリファレンスの最初の値を取得するために使用します。
String[] getValues(String name, String[] defaults) プリファレンスのすべての値を取得するために使用します。
boolean isReadOnly(String name) 特定のプリファレンスが読み込み専用かどうかを判別するために使用します。
Enumeration getNames() すべてのプリファレンス名の列挙値を取得するために使用します。
Map getMap() プリファレンスのマップを取得するために使用します。
void setValue(String name, String value) プリファレンスの値を設定するために使用します。
void setValues(String name, String[] values) プリファレンスに複数の値を設定するために使用します。
void store() ポートレットのプリファレンスに加えた変更をコミットするために使用します。
void reset(String name) プリファレンスの値をデフォルトに戻すか、デフォルトがない場合はプリファレンスを削除するために使用します。

2.5.6. ポートレットタグライブラリ

ポートレットタグライブラリはポートレットに含まれているJSPファイルで簡単にポートレット関連のオブジェクトを操作できるよう、 JSR 168 / 286 の仕様で用意されたカスタムタグライブラリです。以下のタグが提供されています。
表2.5.6-1
タグ名 概要
<portlet:defineObjects/> 定義することで JSP ファイル中から以下の変数が利用可能になります。
  • RenderRequest renderRequest
  • RenderResponse renderResponse
  • PortletConfig portletConfig
<portlet:actionURL/> 現行のポートレットを指定し、提供されたパラメータでアクションリクエストを起動するのに必要なURLを作成します。 form タグの action 属性に指定することで、対象のポートレットの processAction と対応のポートレットモードの描画処理が 呼び出されます。属性も指定することが出来、以下に主な属性について示します。
windowState このリンクが実行されるときにポートレットが有すべきウィンドウ状態を示します。
portletMode このリンクが実行されるときにポートレットが有すべきポートレットモードを示します。
name ProcessActionで注釈を付けられたメソッドにディスパッチするためにGenericPortletによって使用されることが可能なアクションの名前を指定します。
例:
<portlet:actionURL windowState="maximized" portletMode="edit" name="action1">
    <portlet:param name="action" value=2editStocks"/>
</portlet:actionURL>
上記では、ポートレットをEDITモードおよびMAXIMIZEDウィンドウ状態にするURLを作成します。
<portlet:renderURL/> ポートレットrenderURLタグは、現行のポートレットを指定し、提供されたパラメータでレンダーリクエストを起動するのに必要なURLを作成します。 form タグの action 属性に指定することで、対象のポートレットの対応のポートレットモードの描画処理が呼び出されます。 属性も指定することが可能です。主な属性については actionURL タグを参照して下さい。
例:
<form action="<portlet:renderURL portletMode="view"/>" method="POST">
<input name="view" type="submit" value="back to view mode"></form>
上記では、表示モードに変更するリンクボタンを提供します。
<portlet:resourceURL/> ポートレットresourceURLタグは、現行のポートレットを指定し、提供されたパラメータでserveResourceリクエストを起動するのに必要なURLを作成します。 form タグのaction属性に指定することで、対象ポートレットの serveResource関数が呼び出されます。 属性も指定することが出来、以下に主な属性について示します。
id このリソースに対するIDを指定します。IDは、getResourceID関数経由でリクエストからserveResource関数中で参照することができます。
例:
<form action="<portlet:resourceURL id="res1"/>" method="POST">
<portlet:namespace/> 現行のポートレットに対して一意の値を生成します。このタグは、 (JavaScript関数および変数のような)ポートレットアウトプットの名前付きエレメントのために使用します。
例:
<A HREF="javascript:<portlet:namespace/>doFoo()" >Foo</A>
例では、JavaScript関数‘doFoo’に接頭辞として付け、それによりポータルページでの一意性を確実にします。
<portlet:param/> actionURLまたは renderURLに追加できるパラメータを定義します。
例:
<portlet:param name="myParam" value="someValue"/>

Memo
<portlet:namespace/> タグを利用してHTML上の要素を一意に特定する場合は、ウィンドウ状態を識別する識別子と組み合わせて使用してください。詳細については、2.24. プログラミング上の注意事項を参照してください。

2.5.7. ポートレットアノテーション

JSR 286 ではポートレット用のアノテーションが利用できます。以下のアノテーションが提供されています。
アノテーション名 説明
@ProcessAction(name=<action name>) メソッドに指定できるアノテーションです。name属性で指定された actionURL を処理する関数に指定します。
@ProcessEvent(qname=<event name>) メソッドに指定できるアノテーションです。qname属性で指定されたイベントを処理する関数に指定します。
@RenderMode(name=<portletmode name>) メソッドに指定できるアノテーションです。name属性で指定されたポートレットモードを描画する関数に指定します。

2.5.8. ポートレットイベント

JSR 286 で追加された機構です。ポートレットイベントを利用することで、ポートレット間でデータの送受信を行うことができます。
WebOTX Developer ではポートレット間連携定義エディタを利用してポートレットイベントを作成することができます。 詳細は イベント/パブリックレンダーパラメータを利用したポートレット間連携の作成 を参照して下さい。

2.5.9. パブリックレンダーパラメータ

JSR 286 で追加された機構です。パブリックレンダーパラメータを利用することで、ポートレット間でレンダーパラメータを共有できます。
WebOTX Developer ではポートレット間連携定義エディタを利用してポートレットイベントを作成することができます。 詳細は イベント/パブリックレンダーパラメータを利用したポートレット間連携の作成 を参照して下さい。

2.5.10. ポートレットフィルター

JSR 286 で追加された機構です。ポートレットフィルターを利用することで、クライアントから受け取ったリクエストおよび クライアントへ返却するレスポンスの途中で情報の変換を行うことができます。
WebOTX Developer ではポートレットフィルターウィザードを利用してポートレットフィルターを作成することができます。 詳細は ポートレットフィルターの作成 を参照して下さい。

2.5.11. ポートレットウィンドウ状態

ポートレットのコンテンツが表示されるポートレットウィンドウの状態を表します。WebOTX Portal では以下のポートレットウィンドウ状態があり、 ポートレットウィンドウ状態別に画面表示を変更することも可能です。
詳細は ポートレットウィンドウ状態を利用した表示切替の作成 を参照して下さい。
表2.5.11-1
ポートレットウィンドウ状態 説明
標準 通常の表示状態です。ポータルページのレイアウトに従ってポートレットコンテンツが表示されます。
最大化 1ポータルページ中にポートレットを1つのみ表示する状態です。他のポートレットは表示されません。
最小化 ポートレットウィンドウのタイトルのみを表示し、ポートレットのコンテンツは表示されません。

2.5.12. ポートレットでのクライアント側とサーバ側の基本的な実装

ポートレットでも通常の Web アプリケーションのようにサーバとクライアントでデータのやり取りを行います。 ポートレットでのやり取りは以下のように行います。

2.6. 作成ポートレットに関する実装

WebOTX Portal では 作成ポートレットという概念があります。 ここでは作成ポートレットに関する機能について以下に示します。

2.6.1. 作成ポートレットイベント

WebOTX Portal 上で作成ポートレットを追加、削除、コピーしたときの動作をカスタマイズすることができます。
例えば、作成ポートレットの削除時に作成ポートレット単位で保持していたDBレコードを削除するなどの処理を実装するなど、 作成ポートレットイベントを利用して作成ポートレット単位の処理をポートレットに実装することができます。 基本ポートレットに以下のリスナーを実装することで作成ポートレットイベントの処理を実装できます。
com.nec.webotx.portal.container.portlet.PortletListener

Memo
PortletListenerを実装するクラスは、portlet.xml の portlet-class要素 で定義されるクラスである必要があります。 また、portlet.xml の listener 要素に設定する必要はありません。


以下のインターフェイスが提供されています。
表2.6.1-1
メソッド 概要
addPortlet(long portletId) 作成ポートレット作成時に呼び出されます。本バージョンでは未サポートです。
removePortlet(long portletId) 作成ポートレットの削除時に呼び出されます。ただし、作成ポートレットの削除に失敗した場合は呼び出されません。
引数に、削除した作成ポートレットIDが渡されます。
copyPortlet(long dist,long target) 作成ポートレットのコピー時に呼び出されます。
引数にコピー元の作成ポートレットID、コピー先の作成ポートレットIDが渡されます。

以下に実装例を示します。以下の例では、作成ポートレットのコピー時に独自で保持しているデータベースのレコードをコピーし、削除時にそのレコードを削除しています。
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Locale;

import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.nec.webotx.portal.container.portlet.PortletListenerException;

public class PortletListener extends GenericPortlet implements com.nec.webotx.portal.container.portlet.PortletListener {

    /**
     * 以下のテーブルのレコードをコピーする。
     * idには作成ポートレットIDが入る。
     * 
     * テーブル名 : data
     *   id (bigint, NULL以外)
     *   data (nvarchar(255), NULL)
     */
    public void copyPortlet(long arg0, long arg1) throws PortletListenerException {
        Connection con = null;
        PreparedStatement pstmt = null;
        PreparedStatement copypstmt = null;
        
        try 
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;database=portlet", "user", "password");
            String sql = "select * from data where id = ?";
            pstmt = con.prepareStatement(sql);
            pstmt.setLong(1, srcPortletId);
            ResultSet rset = pstmt.executeQuery();
            
            String data = null;
            while (rset.next())
            {
                data = rset.getString(2);
            }
            
            // コピー処理
            String copySql = "insert into data values(?,?)";
            copypstmt = con.prepareStatement(copySql);
            copypstmt.setLong(1, destPortletId);
            copypstmt.setString(2, data);
            copypstmt.execute();
            
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try 
            {
                if (copypstmt != null)
                {
                    copypstmt.close();
                }
                if (pstmt != null)
                {
                    pstmt.close();
                }
                if (con != null)
                {
                    con.close();
                }
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }

    /**
     * 以下のテーブルのレコードを削除する。
     * idには作成ポートレットIDが入る。
     * 
     * テーブル名 : data
     *   id (bigint, NULL以外)
     *   data (nvarchar(255), NULL)
     */
    public void removePortlet(long arg0) {
	    Connection con = null;
	    PreparedStatement pstmt = null;
	    
        try
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;database=portlet", "user", "password");
            String sql = "delete from data where id = ?";
            pstmt = con.prepareStatement(sql);
            pstmt.setLong(1, portletId);

            // 削除処理
            pstmt.executeUpdate();
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try 
            {
                if (pstmt != null)
                {
                    pstmt.close();
                }
                if (con != null)
                {
                    con.close();
                }
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }
}

2.6.2. 作成ポートレット情報

作成ポートレット作成時に作成日や作成者など作成ポートレットに特有の情報が付与されます。 これらはポートレット中で取得し利用することができ、以下の情報があります。
表2.6.2-1
項目 概要
ポートレット種別 作成ポートレットか引用ポートレットかの情報
作成/引用ポートレットID 作成ポートレットまたは引用ポートレットに割り当てられているID
作成日 作成/引用ポートレットが作成されてた日時
更新日 作成/引用ポートレットが更新されてた日時
作成者 作成/引用ポートレットを作成したユーザ
説明 作成/引用ポートレットに付与されているポートレットの説明
表示名 作成/引用ポートレットのポートレットウィンドウでの表示名
引用元の作成ポートレットID 引用ポートレットの場合の引用元のポートレットID
引用元の作成ポートレット表示名 引用ポートレットの場合の引用元の表示名
基本ポートレットID 作成/引用ポートレットの元となる基本ポートレットのポートレットID
上記のポートレット情報は以下のメソッドの引数のポートレットリクエストから取得することができます。 各リクエストからは以下の定数を利用して取得します。
表2.6.2-2
パラメータ名 概要
com.nec.webotx.portal.container.portlet. PortletRequestAttributesConsts.PORTLET_DEFINITION_ID 基本ポートレットIDが設定されているパラメータ名。基本ポートレットIDの型は long 型
com.nec.webotx.portal.container.portlet. PortletRequestAttributesConsts.ABOUT 作成日や作成者等、基本ポートレットID以外の情報を管理するオブジェクトが設定されているパラメータ名。 オブジェクトの型は com.nec.webotx.portal.container.portlet.AboutProperty

以下に取得例を示します。
public void doView(RenderRequest request, RenderResponse response) {

   // リクエストから AboutProperty オブジェクト取得
   AboutProperty aboutProperty = (AboutProperty) request.getAttribute(PortletRequestAttributesConsts.ABOUT);
   
   // リクエストから 基本ポートレットIDを取得
   long id = (long) request.getAttribute(PortletRequestAttributesConsts.PORTLET_DEFINITION_ID);

AboutProperty オブジェクトからは各関数を利用して情報を取得します。対応する関数は以下のようになっています。
表2.6.2-3
項目 関数名 返却値
ポートレット種別 getPortletType() 作成ポートレットの場合: com.nec.webotx.portal.container. portlet.AboutProperty.CONFIGURED_PORTLET
引用ポートレットの場合: com.nec.webotx.portal.container. portlet.AboutProperty.REFERENCE_PORTLET
作成/引用ポートレットID getId() long
作成日 getCreateDate() java.util.Date
更新日 getUpdateDate() java.util.Date
作成者 getCreater() java.lang.String
説明 getDescription() java.lang.String
表示名 getName(java.util.Locale locale) java.lang.String
引用元の作成ポートレットID getSourceConfiguredPortletId() long
引用元の作成ポートレット表示名 getSourceConfiguredPortletName(java.util.Locale locale) java.lang.String

2.7. セッションを利用したポートレット間連携の作成

あるポートレットでアプリケーションスコープのセッション上にデータを格納すると、同じページ上の別のポートレットからそのセッションを経由してデータを受け取ることができます。
セッションを使ってデータの受け渡しを行うため、通信範囲が同じWebアプリケーション内に限定されます。従って、ポートレット間で連携する必要のあるポートレット同士は同じWebアプリケーション(同じ portlet.xml)に定義されている必要があります。
使用例:
PortletSession session = request.getSession(true);
URL url = new URL("http://www.nec.com");
session.setAttribute("home.url", url, PortletSession.APPLICATION_SCOPE);
session.setAttribute("bkg.color", "RED", PortletSession.PORTLET_SCOPE); 

2.8. イベント/パブリックレンダーパラメータを利用したポートレット間連携の作成

ポートレットを作成した直後に、ポートレット間連携定義エディタを使用して、イベントを利用したポートレット間連携の作成ができます。

2.8.1. ポートレット間連携定義エディタについて

JSR286では、ポートレット間通信が可能です。そのため、ポートレット間連携定義エディタにより、各ポートレットがイベントハンドラを実装することになり、ポートレット間の連携を利用した複合アプリケーションも構築することになります。そして、ドラッグ・ドロップなどの簡単な操作を通じ、手軽にポートレット間を連携することができます。
ポートレット間連携定義エディタで、ポートレットの追加表示・非表示、イベントとパブリックレンダーパラメータの新規作成・編集・削除、イベント/パブリックレンダーパラメータの処理の生成を行うことができます。

ポートレット間連携定義エディタを利用し、イベント連携を行うポートレットアプリケーションを作成する流れを以下に示します。


図2.8.1-1


ポートレット間連携定義エディタを利用し、パラメータ共有を行うポートレットアプリケーションを作成する流れを以下に示します。


図2.8.1-2


2.8.2. ポートレット間連携定義エディタの画面構成

ポートレット間連携定義エディタと関連する開発環境の要素は、以下の通りです。


図2.8.2-1


表2.8.2-1
画面要素 画面種類 説明
ポートレット間連携定義エディタの本体 エディタ イベント、パブリックレンダーパラメータの定義やポートレット間の連携などができます。
プロジェクト・エクスプローラ ビュー ポートレットプロジェクトの構成の表示やポートレット間連携定義エディタの起動などができます。
プロパティー・ビュー ビュー 指定されているコンポーネントのプロパティーを表示します。
ツール・バー ボタン・ドロップダウンリスト ポートレット間連携定義エディタのカンバスの拡大・縮小ができます。
メニュー・バー ドロップダウンリスト ポートレット間連携定義エディタの起動や起動パターンの設定ができます。
ステータス・バー ラベル ビューの情報などが表示されます。

2.8.2.1. ポートレット開発専用ツール・バーの説明

ポートレット間連携定義エディタで、下記のような専用ツール・バーが提供されます。


図2.8.2.1-1


専用ツール・バーを用いることで、以下の操作が可能です。
表2.8.2.1-1
アイコン 項目 説明

自動レイアウト ポートレットが自動的にレイアウトされます。

拡大 5%、10%、15%、25%、50%、75%、100%の順で、拡大していきます。
※ 最大の100%になると、使用不可になります。

縮小 100%、75%、50%、25%、15%、10%、5%の順で、縮小していきます。
※ 最小の5%になると、使用不可になります。

倍率 5%から100%までの拡大・縮小表示が可能です。
ズームの倍率の初期状態は100%です。
倍率リストに5%、10%、15%、25%、50%、75%、100%の表示が可能です。
上記倍率以外に「Page」、「Height」、「Width」を指定して表示するズームを変更することができます。
※ 「Page」を指定したら、カンバスページのサイズに合わせて拡大・縮小します。
※ 「Width」を指定したら、カンバスページの幅に合わせて拡大・縮小します。
※ 「Height」を指定したら、カンバスページの高さに合わせて拡大・縮小します。
直接に倍率を入力して指定できます。この場合は、以下のルールに従います。
※ 最大の100%以上になると、自動的に「100%」にします。
※ 最小の5%以下になると、自動的に「5%」にします。
※ 5?100の範囲内で小数値を入力すると、小数点以下第一位が四捨五入された値になります。

Memo
ポートレット間連携定義エディタで、 元に戻すやり直し との機能は提供しません。

2.8.2.2. ポートレット間連携定義エディタの本体の説明


[カンバス]

ポートレット間連携定義エディタの本体ははっきりと見えるため、グリッドを描いています。


図2.8.2.2-1



[最大化・最小化]

ポートレット間連携定義エディタは他のエディタと同じく最大化・最小化できます。
ポートレット間連携定義エディタやプロジェクト・エクスプローラやアウトライン一覧ビューやビューのタブ部分をダブルクリックすると、 その部分が最大化で表示されます。元に戻す場合は、もう一度ダブルクリックします。
例:ポートレット間連携定義エディタのタブをダブルクリックして、最大化で表示されたときの画面を以下に示します。


図2.8.2.2-2



[スクロール・バー]

ポートレットの位置を調整することにより、カンバスで表示しきれない時にスクロール・バーを表示します。


図2.8.2.2-3



[コンテキスト・メニュー]

カンバスの空白の場所で右クリックすると、コンテキスト・メニューで「表示のクリア」を表示します。クリアを選択すれば、当該カンバスのすべての画面要素が削除されます。引き続きポートレット間にイベントを定義するため、ポートレット一覧ビューからドラッグ・ドロップでポートレットを追加する必要があります。
表2.8.2.2-1
メニュー名 アイコン 出る箇所 実行結果
表示のクリア

カンバスの空白 すべての画面要素を消します。


図2.8.2.2-4


表示のクリアをクリックすると、以下のような確認ダイアログを表示します。


図2.8.2.2-5


はい をクリックすると、カンバスで表示しているポートレットがクリアされます。

[選択]

ポートレット間連携定義エディタカンバスの上に表示されているポートレットやイベントやパブリックレンダーパラメータや結線は複数で選択できません。

2.8.2.3. プロパティー・ビューの説明

ポートレット間連携定義エディタの上でポートレット、イベント、パブリックレンダーパラメータを選択している場合、プロパティー・ビューで選択したノードの詳細情報が表示されます。
ポートレットの情報は編集できません。
イベントとパブリックレンダーパラメータの情報は編集できます。

2.8.2.4. ステータス・バーの説明

プロジェクト・エクスプローラでポートレットのツリーノードを選択した時に、該当するメッセージを表示します。


図2.8.2.4-1


表2.8.2.4-1
ノード名 メッセージ
JSR168に準拠するポートレット JSR168に準拠するポートレットなので、ドラッグ&ドロップできません。
JSR286に準拠するポートレット JSR286に準拠するポートレットなので、ドラッグ&ドロップできます。

2.8.3. ポートレット間連携定義エディタの起動

メニュー・バーで ウィンドウ のドロップダンウリストから ポートレット間連携定義エディタ を選択して、ポートレット間連携定義エディタを起動します。


図2.8.3-1


Memo
WebOTX開発環境で、ポートレット間連携定義エディタは同時に一つのみ開くことができます。


2.8.3.1. 起動パターンの設定

ポートレット間連携定義エディタは起動パターン設定画面で読み込むポートレットを指定できます。
メニュー・バーから ウィンドウ 設定WebOTX ポータル>ポートレット間連携定義エディタ を選択すると、起動パターン設定画面が表示されます。


図2.8.3.1-1



[ポートレットを読み込まずに起動]


読み込まず起動 を選択している場合、エディタには何も表示せずに起動されます。
デフォルトではこのパターンが選択されています。


[ポートレット全てを読み込んで起動]


起動パターン設定画面で ポートレット全てを読み込んで起動 を選択して、エディタを起動すると、ワークスペース上で開かれているポートレットプロジェクトに含まれているポートレット全てが自動的に追加されます。
カンバスに追加されたポートレットは自動的にレイアウトされます。


図2.8.3.1-2


2.8.4. ポートレット間連携定義エディタでポートレットの追加

2.8.4.1. ポートレットの表示/非表示

ポートレットデプロイメント記述子ノードの表示方法
プロジェクト・エクスプローラ・ビューで表示されているv2.0の「ポートレットデプロイメント記述子」あるいは「ポートレット参照」で参照しているポートレットをドラッグ・ドロップ操作でポートレット間連携定義エディタへ追加することができます。


図2.8.4.1-1



図2.8.4.1-2

ポートレット参照ノードの表示方法
ポートレットの表示ルール
複数のポートレットを選択したままドラッグ・ドロップして追加することはできません。その操作を行った場合、追加されるのは最初にドラッグ・ドロップされたポートレットのみです。
また、JSR168に準拠するポートレットは追加できません。追加できるのはJSR286に準拠するポートレット、即ち、ポートレットデプロイメント記述子のバージョンがv2.0のポートレットのみです。
ポートレットの構成


図2.8.4.1-3

表2.8.4.1-1
項目 説明
ポートレットのアイコン ポートレットの種類を表示します。
ポートレット名 ポートレット名を表示します。
イベント/パブリックレンダーパラメータの追加ボタン ポートレットに新しいイベント/パブリックレンダーパラメータを追加します。
※参照のポートレットにこのボタンは表示されません。
ポートレットの背景 ポートレットの「参照/非参照」の区分を表示します。
区分
背景の色
非参照


参照


ポートレット名が長すぎて表示し切れない場合は、一部のみを表示し、その後ろに文字列が切れていることを表す省略記号"…"を表示します。ツールチップではポートレット名を全て表示します。


図2.8.4.1-4

ポートレットの非表示
ポートレット間連携定義エディタで表示されているポートレットは非表示できます。
ポートレットの非表示の方法

[コンテキスト・メニュー]

ポートレットを選択して、右クリックすると、ポートレットのコンテキスト・メニューが表示されます。


図2.8.4.1-5


非表示 を選択すると、ポートレットの非表示の確認ダイアログが表示されます。


図2.8.4.1-6


はい をクリックすると、このポートレットが非表示します。

[キーボードの「Delete」キー]

ポートレットを選択して、キーボードの「Delete」キーを押すと、ポートレットの非表示の確認ダイアログも表示されます。確認ダイアログは「コンテキスト・メニューで」と同じです。
ポートレットの非表示のルール
ポートレットを非表示する場合、特にルールはありません。
「portlet.xml」ファイルの更新
ポートレットの非表示する時に、「portlet.xml」ファイルは更新しません。
プロジェクト・エクスプローラ・ビューの更新
ポートレットの非表示する時に、プロジェクト・エクスプローラ・ビューも更新しません。

2.8.4.2. ポートレットの選択/移動


[基本操作のルール]

追加されたポートレットの基本操作は以下のルールに従っています。
A)     枠のサイズは変更できません。
B)     ポートレット間連携定義エディタ内の任意の場所に移動できます。

[ポートレットの選択]

追加されたポートレットをマウスで左クリックすると、当該のポートレットが選択状態になります。
ポートレットを選択すると、以下のように表示が変更されます。
A)     ポートレットの背景がオレンジ色に変更されます。


図2.8.4.2-1

B)     プロパティー・ビューで当該のポートレットの関連情報が表示されます。


図2.8.4.2-2


表2.8.4.2-1
項目 説明
名前 ポートレット名を表示します。
バージョン ポートレットに準拠する仕様のバージョンを表示します。
パス ポートレットに含まれているportlet.xmlのパスを表示します
フィルター数 マッピングされたフィルター要素の総数を表示します。
イベント数 イベント要素の総数を表示します。
パブリックレンダーパラメータ数 パブリックレンダーパラメータ要素の総数を表示します。

Memo
ポートレットの関連情報は編集できません。



[ポートレットの移動]

カンバスでポートレットをドラッグして、任意の場所にドロップすると、その場所に移動することができます。


図2.8.4.2-3



図2.8.4.2-4


Memo
ポートレットを移動した場合、ポートレットに所属するイベント/パブリックレンダーパラメータも一緒に移動します。


Memo
「portlet.xml」ファイルの更新
D&Dでポートレットをポートレット間連携定義エディタへ追加する時に「portlet.xml」ファイルは更新されません。


Memo
プロジェクト・エクスプローラ・ビューの更新
D&Dでポートレットをポートレット間連携定義エディタへ追加する時にプロジェクト・エクスプローラ・ビューも更新されません。


2.8.5. イベントを利用する場合

2.8.5.1. ポートレット間連携定義エディタでイベントの新規作成

非参照のポートレットがポートレット間連携定義エディタで追加された後で、イベントを新規に作成することができます。

[イベントの新規作成の方法]

ポートレット間連携定義エディタでは以下の三つの方法でイベントを新規に作成することができます。

イベントの追加ボタン
ポートレットを選択して、ポートレット名の右側にある「 」(イベントの追加ボタンと呼びます)をクリックすると、イベント/パブリックレンダーパラメータの追加メニューが表示されます。 イベント を選択すると、新しいイベントが選択されているポートレットに追加されます。


図2.8.5.1-1



図2.8.5.1-2


コンテキスト・メニュー
ポートレットを右クリックして、表示されるコンテキストメニューの ノードの追加>イベント を選択すると、新しいイベントが選択されているポートレットに追加されます。


図2.8.5.1-3



図2.8.5.1-4


ドラッグ・ドロップ
ポートレット間連携定義エディタで、既存のイベントをドラッグ・ドロップして、連携先のイベントを新規作成できます。追加されたイベントの属性値は既存のイベントにより設定します。
表2.8.5.1-1
属性 新規作成のイベント
イベント名 既存のイベントの「イベント名」の値と同じです。
種別 既存のイベントの「種別」と反対の種別になります。
既存のイベント
新規作成のイベント

送信イベント

受信イベント

受信イベント

送信イベント
名前空間を使用する 既存のイベントの「名前空間を使用する」の値と同じです。
名前空間 既存のイベントの「名前空間」の値と同じです。
接頭辞 既存のイベントの「接頭辞」の値と同じです。
ペイロード型 既存のイベントの「ペイロード型」の値と同じです。
同時に、連携の結線も作成します。


図2.8.5.1-5



図2.8.5.1-6



[イベントの新規作成のルール]

イベントを新規追加する場合、以下のルールに従います。
A)   追加先のポートレットに同じ定義のイベントがありません。
B)   「ポートレット参照」にイベントが追加できません。
C)   「イベント名」は自動的にevent_Nになります。Nは自然数です。
※「イベント名」が重複した場合、NはN+1になります。
D)   追加位置はポートレットの一番後ろです。
E)   「種別」はデフォルトで「送信イベント」になります。
F)    追加されたイベントはデフォルトで「名前空間」が使用していません。
G)   「ペイロードの型」はデフォルトで「java.lang.String」になります。
※ドラッグ・ドロップで追加したイベントは「E)、F)、G)」のルールに従っていません。

[イベントの構成]


図2.8.5.1-7

表2.8.5.1-2
項目 説明
イベントのアイコン イベントの種別を表示します。
種別 アイコン
送信イベント


受信イベント


イベント名 イベント名を表示します。
イベントの削除ボタン 当該イベントを削除します。
イベント名が長すぎて表示し切れない場合は、一部のみを表示し、その後ろに文字列が切れていることを表す省略記号"…"を表示します。ツールチップではイベント名を全て表示します。


図2.8.5.1-8


[イベントの基本操作]
基本操作のルール
イベントに対する操作については以下のルールに従っています。
A)     サイズを変更できません。
B)     同じのポートレット内に移動できません。
イベントのボーダーの表示
イベントの範囲をマウスオーバーすると、イベントのボーダーが表示されます。
例:イベント envet_2 をマウスオーバーするのは示しています。


図2.8.5.1-9


図2.8.5.1-10

インベントの選択
新規作成したイベントをマウスで左クリックすると、当該のイベントが選択している状態になります。
選択している状態の表示は以下の通りです。
A)     「イベント名」は太字で表示します。
B)     イベントが所属するポートレットの背景は選択している色になります。


図2.8.5.1-11


図2.8.5.1-12

C)     プロパティー・ビューで当該のイベントの属性情報が表示されています。


図2.8.5.1-13

表2.8.5.1-3
項目 説明
イベント名 イベント名を表示します。
種別 イベントの種別を指定します。
名前空間を使用する 名前空間を使用するかどうかを指定します。
名前空間 名前空間を指定します。
接頭辞 接頭辞を指定します。
ペイロード型 ペイロード型を指定します。
コンボボックス(イベントペイロード型)のアイテム内容はJAXB2.0仕様書の8.5.1章と8.5.2章(java.lang.Objectを除く)のJavaプリミティブ型/標準クラスの一覧に載っている型です。
Java Primitive Types to Schema Types
Java Primitive Type XML data type
boolean xs:boolean
byte xs:byte
short xs:short
int xs:int
long xs:long
float xs:float
double xs:double
Mapping of Standard Java classes
Java Class XML data type
java.lang.String xs:string
java.math.BigInteger xs:integer
java.math.BigDecimal xs:decimal
java.util.Calendar xs:dateTime
java.util.Date xs:dateTime
javax.xml.namespace.QName xs:QName
java.net.URI xs:string
javax.xml.datatype.XMLGregorianCalendar xs:anySimpleType
javax.xml.datatype.Duration xs:duration
java.lang.Object xs:anyType
java.awt.Image xs:base64Binary
javax.activation.DataHandler xs:base64Binary
javax.xml.transform.Source xs:base64Binary
java.util.UUID xs:string

名前空間を使用する がチェックされていない場合、 名前空間接頭辞 は入力できません。

[portlet.xmlファイルの更新]

エディタでイベントを新規作すると、すぐに下記の記述が「portlet.xml」ファイル内容を更新します。
送信イベントの更新ファイルの仕様
更新ファイル:
portlet.xml
※portlet.xmlはポートレット間連携定義エディタで選択したポートレットの関連portlet.xmlです。
更新内容:
portlet.xml(フォーマット)
名前空間を使用する が選択されている場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event xmlns:接頭辞='名前空間'>
     <qname>接頭辞:イベント名</qname>
    </supported-publishing-event>
  </portlet>
……
  <event-definition xmlns:接頭辞='名前空間'>
    <qname>接頭辞:イベント名</qname>
    <value-type>イベントペイロードの型</value-type>
  </event-definition>
……
</portlet-app>

名前空間を使用する が選択されていない場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event>
      <name>イベント名</name>
    </supported-publishing-event>
  </portlet>
……
  <event-definition>
    <name>イベント名</name>
    <value-type>イベントペイロードの型</value-type>
  </event-definition>
……
</portlet-app>

太字部分は追加内容です。 イベント名名前空間接頭辞イベントペイロードの型 はイベントのプロパティー・ビューで入力した値です。
portlet.xml(例)
イベント名 = eventName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
イベントペイロードの型 = java.lang.String
名前空間を使用する が選択されている場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event xmlns:prefix='http://com.nec.webotx'>
      <qname>prefix:eventName</qname>
    </supported-publishing-event>
  </portlet>
……
  <event-definition xmlns:prefix='http://com.nec.webotx'>
    <qname>prefix:eventName</qname>
    <value-type>java.lang.String</value-type>
  </event-definition>
……
</portlet-app>

名前空間を使用する が選択されていない場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event>
      <name>eventName</name>
    </supported-publishing-event>
  </portlet>
……
  <event-definition>
    <name>eventName</name>
    <value-type>java.lang.String</value-type>
  </event-definition>
……
</portlet-app>

受信イベントの更新ファイルの仕様
更新ファイル:
portlet.xml
※portlet.xmlはポートレット間連携定義エディタで選択したポートレットの関連portlet.xmlです。
更新内容:
portlet.xml(フォーマット)
送信イベントの追加更新ファイルの仕様 と大体一致ので、上記の内容を参照してください。
名前空間を使用する が選択されている場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-processing-event xmlns:接頭辞='名前空間'>
      <qname>接頭辞:イベント名</qname>
    </supported-processing-event>
  </portlet>
……
  <event-definition xmlns:接頭辞='名前空間'>
    <qname>接頭辞:イベント名</qname>
    <value-type>イベントペイロードの型</value-type>
  </event-definition>
……
</portlet-app>

名前空間を使用する が選択されていない場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-processing-event>
      <name>イベント名</name>
    </supported-processing-event>
  </portlet>
……
  <event-definition>
    <name>イベント名</name>
    <value-type>イベントペイロードの型</value-type>
  </event-definition>
……
</portlet-app>

太字部分は追加内容です。 イベント名名前空間接頭辞イベントペイロードの型 はイベントのプロパティー・ビューで入力した値です。
変更点:<supported-publishing-event> → <supported-processing-event>

[プロジェクト・エクスプローラ・ビューの更新]

「portlet.xml」ファイル内容を更新すると、プロジェクト・エクスプローラ・ビューで表示されているノードが更新されます。


図2.8.5.1-14


ポートレットデプロイメント記述子の直下に event_1 ノードが追加されました。

2.8.5.2. ポートレット間連携定義エディタでイベントの編集

イベントの編集は二つ種類があります。
1、プロパティー・ビューを通じてイベント属性の修正して、ポートレット間連携を作成します。
2、コンテキスト・メニューを通じてイベントに処理を生成します。

[プロパティー・ビューで属性の編集]

ポートレット参照の中のイベントはイベント参照と呼びます。イベント参照はプロパティー・ビューで属性が編集できません。
イベント参照を選択した場合、以下のようなプロパティー・ビューが表示されます。


図2.8.5.2-1


上記以外の場合、ポートレット間連携定義エディタでイベントを選択すると、以下のようなプロパティー・ビューが表示されます。


図2.8.5.2-2


この時、プロパティー・ビューをクリックしてプロパティー・ビューがアクティブ状態になると、イベントの属性は編集できます。


図2.8.5.2-3



図2.8.5.2-4


イベント定義プロパティー・ビューで入力内容の妥当性の検証に行っています。検証に失敗した場合、属性名が赤字になり、ツールチップでエラーメッセージが表示されます。
妥当性の検証ルールは下記のです。
表2.8.5.2-1
属性 入力内容 結果
イベント名 「英数字」、「_」、「-」、「.」 正常に表示します。
  「イベント名」が赤字になります。
エラーメッセージ:「イベント名を入力してください。」
  既に存在しているイベントの名前(※1) 「イベント名」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}イベント名)。」
  無効文字
「英数字」、「_」、「-」、「.」以外の文字。
「イベント名」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。イベント名には( 英数字_-. ) のみ利用できます。」
  命名ルール違反(数字、「.」、「-」で始まる)の入力 「イベント名」が赤字になります。
エラーメッセージ:「イベント名は( 数字.- )で始めることはできません。」
  命名ルール違反「.」で開始または終了 「イベント名」が赤字になります。
エラーメッセージ:「イベント名をドットで開始または終了することはできません。」
種別 既に存在しているイベントの名前(※1) 「種別」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}イベント名)。」
  上記以外の場合 正常に表示します。
名前空間を使用する 既に存在しているイベントの名前(※1) 「名前空間を使用する」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}イベント名)。」
  上記以外の場合 正常に表示します。
名前空間 有効文字
英数字+"~`!@#$%^*()_-+=|\{}[]:;"?/,. "
正常に表示します。
  「名前空間」が赤字になります。
エラーメッセージ:「名前空間を入力してください。」
  既に存在しているイベントの名前(※1) 「名前空間」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}イベント名)。」
  無効文字。
英数字+"~`!@#$%^*()_-+=|\{}[]:;"?/,. "以外の文字。
「名前空間」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。名前空間には( 英数字~`!@#$%^*()_-+=|\{}[]:;"?/,.空白)のみを指定できます。」
接頭辞 「英数字」、「_」、「-」、「.」 正常に表示します。
  「接頭辞」が赤字になります。
エラーメッセージ:「接頭辞を入力してください。」
  既に存在しているイベントの名前(※1) 「接頭辞」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}イベント名)。」
  無効文字
「英数字」、「_」、「-」、「.」以外の文字。
「接頭辞」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。接頭辞には( 英数字_-. )のみを指定できます。」
  命名ルール違反(数字、「.」、「-」で始まる)を入力 「接頭辞」が赤字になります。
エラーメッセージ:「接頭辞は( 数字.- )で始めることはできません。」
ペイロードの型 既に存在しているイベントの名前(※1) 「接頭辞」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}イベント名)。」
  上記の以外の場合 正常に表示します。
参照 の説明
参照 ボタンをクリックすると、 イベントペイロードの型の選択 ダイアログが表示されます。


図2.8.5.2-5


使用したいペイロード型名を入力すると、 一致する項目 でリストが表示されます。
例:「hashmap」を入力すると、ダイアログは下記のように表示します。


図2.8.5.2-6


リストでペイロード型を選択すると、 OK が利用できます。
OK をクリックすると、選択したペイロード型のクラス名は ペイロードの型 に入力します。


図2.8.5.2-7


※1 イベントが既に存在するかどうかの判断ルールは下記になります。
1、同一の「portlet.xml」内。
2、全ての属性の値が有効。
3、「イベント名」の値が同じ。
4、「種類」の値が同じ。
5、「名前空間を使用する」のチェックの状態が同じ。
6、「名前空間」の値が同じ。
7、「接頭辞」の値が同じ。
8、「ペイロードの型」の値が同じ。
エラーがある場合、以下のようなイメージを示します。


図2.8.5.2-8


portlet.xmlファイルの更新
イベント定義のプロパティー・ビューでイベント定義が変更されており、エラーがない場合、アクティブ状態から非アクティブ状態になると、変更の属性値はすぐに「portlet.xml」に更新します。
エラーがある場合、全ての変更した属性値は「portlet.xml」に更新しません。
プロジェクト・エクスプローラ・ビューの更新
「portlet.xml」を更新した後で、プロジェクト・エクスプローラ・ビューでイベントノードも更新します。

[イベントに処理の生成]

ポートレット間連携定義エディタはイベントの処理を生成できます。
イベントの種類により、二つ状況があります。
1、送信イベント
2、受信イベント
ポートレット間連携定義エディタの上にあるイベントを右クリックすると、コンテキスト・メニューが表示されます。


図2.8.5.2-9



図2.8.5.2-10


処理生成のダイアログ
A) 送信イベント
送信イベントに処理を生成 を選択すると、下記のダイアログが表示されます。


図2.8.5.2-11


表2.8.5.2-2
項目 説明
既存メソッドに追加 既存メソッドに処理ソースを追加します。
このボタンを選択すると、「メソッド名」入力欄は利用できます。
メソッド名 ポートレットクラスのJavaファイルに対する既存のメソッドを表示します。
新規メソッドを生成 新規のメソッドを追加します。
このボタンを選択すると、「メソッド名」入力欄は利用できます。
メソッド名 Javaの命名ルールに従って、新規のメソッド名を指定します。
「はい」ボタン 既存のメソッドが指定された場合、あるいは新規のメソッド名が正しく入力された場合、このボタンは利用できます。
「新規メソッドを生成」を選択した状態で、既に存在しているメソッド名を入力した場合、「はい」ボタンは利用できません。
「新規メソッドを生成」を選択した状態で、無効のメソッド名を指定した場合、エラーダイアログが表示されます。
エラーメッセージについては「エラーコード及びメッセージ一覧」を参照してください。
「いいえ」ボタン 処理の生成を中止します。

Memo
Javaの命名ルール:
   1.  大文字と小文字を区別します。
   2. 1文字目は英字、$, _ の何れかとします。
   3. キーワードと重複しないようにします。
   4. false, true (boolean literal) は不可です。
   5. null (null literal) は不可です。
   6. 記号は、演算子/特殊文字は不可です。
   7. 文字数は任意です。
   8. 言語は任意です。
キーワードには次の 49 個が定義されています。

abstract default if private this boolean do
implements protected throw break double import public
throws byte else instanceof return transient case
extends int short try catch final interface
static void char finally long strictfp volatile
class float native super while const for
new switch continue goto package synchronized assert

B) 受信イベント
受信イベントに処理を生成 を選択すると、下記のダイアログが表示されます。


図2.8.5.2-12


表2.8.5.2-3
項目 説明
メソッド名の入力 Javaの命名ルールに従って、新規のメソッド名を指定します。
「はい」ボタン メソッド名が正しく入力された場合、このボタンは利用できます。
既に存在しているメソッド名を入力した場合、エラーダイアログが表示されます。
指定のメソッド名が無効である場合、エラーダイアログが表示されます。
エラーメッセージについては「エラーコード及びメッセージ一覧」を参照してください。
「いいえ」ボタン 処理の生成を中止します。
ポートレットクラスのJavaファイルの更新
処理ダイアログで正しく入力して はい をクリックすると、ポートレットクラスのJavaファイルは更新します。
ポートレットクラスのJavaファイルはポートレット間連携定義エディタで選択したポートレットの関連Javaファイルです。
A) 送信イベント
更新内容: 新規メソッドを生成 を選択した場合
ポートレットクラスのJavaファイル(フォーマット)
■名前空間ありイベントを選択した場合
……
  public void メソッド名(ActionRequest request, ActionResponse response) {
    try {
      javax.xml.namespace.QName qName = new javax.xml.namespace.QName ("名前空間", "イベント名", "接頭辞");
      イベントペイロードの型data = null;
      response.setEvent(qName, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

■名前空間なしイベントを選択した場合
……
  public void メソッド名(ActionRequest request, ActionResponse response) {
    try {
      String event = "イベント名";
      イベントペイロードの型data = null;
      response.setEvent(event, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

太字部分は追加内容です。メソッド名は送信イベントに処理の生成ダイアログで入力した値です。 イベント名名前空間接頭辞イベントペイロードの型 は選択した送信イベントの情報です。
ポートレットクラスのJavaファイル(例)
メソッド名 = testEvent
イベント名 = eventName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
イベントペイロードの型 = java.lang.String
■名前空間ありイベントを選択した場合
……
  public void testEvent (ActionRequest request, ActionResponse response) {
    try {
      javax.xml.namespace.QName qName = new javax.xml.namespace.QName ("http://com.nec.webotx ", "eventName", "prefix");
      java.lang.String data = null;
      response.setEvent(qName, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

■名前空間なしイベントを選択した場合
……
  public void testEvent (ActionRequest request, ActionResponse response) {
    try {
      String event = "eventName";
      java.lang.String data = null;
      response.setEvent(event, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

既存メソッドに追加 を選択した場合
ポートレットクラスのJavaファイル(フォーマット)
■名前空間ありイベントを選択した場合
……
  public void メソッド名 {
……
    try {
      javax.xml.namespace.QName qName = new javax.xml.namespace.QName("名前空間", "イベント名", "接頭辞");
      イベントペイロードの型data = null;
      response.setEvent(qName, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

■名前空間なしイベントを選択した場合
……
  public void メソッド名 {
……
    try {
      String event = "イベント名";
      イベントペイロードの型data = null;
      response.setEvent(event, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

太字部分は追加内容です。メソッド名は送信イベントに処理の生成ダイアログで入力した値です。イベント名、名前空間、接頭辞、イベントペイロードの型は選択した送信イベントの情報です。
ポートレットクラスのJavaファイル(例)
メソッド名 = processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException
イベント名 = eventName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
イベントペイロードの型 = java.lang.String
■名前空間ありイベントを選択した場合
……
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
    try {
      javax.xml.namespace.QName qName = new QName("http://com.nec.webotx ", "eventName", "prefix");
      java.lang.String data = null;
      response.setEvent(qName, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

■名前空間なしイベントを選択した場合
……
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
    try {
      String event = "eventName";
      java.lang.String data = null;
      response.setEvent(event, data);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
……

B) 受信イベント
更新内容:
ポートレットクラスのJavaファイル(フォーマット)
■名前空間ありイベントを選択した場合
……
@ProcessEvent(qname = "{名前空間}イベント名")
 public void メソッド名(EventRequest request,  EventResponse response)   throws PortletException, IOException {
  Event event = request.getEvent();
  response.setRenderParameter(event.getName(), (イベントペイロードの型) event.getValue());
 }
……

■名前空間なしイベントを選択した場合
……
@ProcessEvent(name = "イベント名")
 public void メソッド名(EventRequest request,  EventResponse response)   throws PortletException, IOException {
  Event event = request.getEvent();
  response.setRenderParameter(event.getName(), (イベントペイロードの型) event.getValue());
 }
……

太字部分は追加内容です。メソッド名は受信側ポートレットに処理の生成ダイアログで入力した値です。イベント名、名前空間、イベントペイロードの型は選択した受信イベントの情報です。
※「@ProcessEvent」とのアノテーションはアノテーション・ビューで追加することができます。
ポータル用アノテーションについては「XXXXXXXXX」をご参照ください。
ポートレットクラスのJavaファイル(例)
メソッド名 = handleProcessEvent
イベント名 = eventName
名前空間 = http://com.nec.webotx
イベントペイロードの型 = java.lang.String
■名前空間あり、イベントを選択した場合
……
@ProcessEvent(qname = "{http://com.nec.webotx}eventName ")
 public void handleProcessEvent(EventRequest request,  EventResponse response)
   throws PortletException, IOException {
  Event event = request.getEvent();
  response.setRenderParameter(event.getName(), (java.lang.String) event.getValue());
 }
……

■名前空間なし、イベントを選択した場合
……
@ProcessEvent(name = "eventName")
 public void handleProcessEvent(EventRequest request,  EventResponse response)
   throws PortletException, IOException {
  Event event = request.getEvent();
  response.setRenderParameter(event.getName(), (java.lang.String) event.getValue());
 }
……

ポートレットクラスのJavaファイルの表示
ポートレットクラスのJavaファイルを更新すると、Javaエディタを開きます。更新したJavaファイルの内容が表示されます。


図2.8.5.2-13


2.8.5.3. ポートレット間連携定義エディタでイベントの削除

ポートレット間連携定義エディタで表示されている非参照のポートレットの既存と新規のイベントは削除できます。
イベントの削除の方法
ポートレット間連携定義エディタは三つイベントの削除の方法が提供されています。

[イベントの削除ボタン]

イベントを選択して、イベント名の右側にある「 」(イベントの削除ボタンと呼びます)をクリックすると、 イベントの削除 の確認ダイアログが表示されます。


図2.8.5.3-1


はい をクリックすると、当該のイベントを削除します。
同時に、削除したイベントに対する全てのポートレット間連携の結線が削除されます。

[コンテキスト・メニュー]

コンテキスト・メニューでイベントの削除は二つ場合があります。
◇  イベントのコンテキスト・メニュー
イベントを選択して、右クリックすると、イベントのコンテキスト・メニューが表示されます。 イベント定義の削除 を選択すると、イベントの削除の確認ダイアログが表示されます。確認ダイアログは イベントの削除ボタン と同じです。
送信イベント


図2.8.5.3-2


受信イベント


図2.8.5.3-3


◇  結線のコンテキスト・メニュー
ポートレット間連携の結線を選択して、右クリックすると、 定義の削除 のコンテキスト・メニューが表示されます。


図2.8.5.3-4


送信イベント定義の削除 を選択すると、下記のようなダイアログが表示されます。


図2.8.5.3-5


はい を選択すると、送信イベントが削除されます。同時に、削除したイベントに対する全てのポートレット間連携の結線が削除されます。


図2.8.5.3-6


はい を選択すると、受信イベントが削除されます。同時に、削除したイベントに対する全てのポートレット間連携の結線が削除されます。


図2.8.5.3-7


はい を選択すると、送信イベントと受信イベントが削除されます。同時に、削除した両方のイベントに対する全てのポートレット間連携の結線が削除されます。

[キーボードの「Delete」キー]

イベントを選択して、キーボードの「Delete」キーを押すと、イベントの削除の確認ダイアログも表示されます。確認ダイアログは イベントの削除ボタン と同じです。
イベントの削除のルール
イベントを削除する場合、以下のルールに従います。
「ポートレット参照」にイベントが削除できません。
「portlet.xml」ファイルの更新
イベントを削除すると、「portlet.xml」ファイルに当該イベントの定義は削除して更新します。

[送信イベントの削除の更新仕様]

更新ファイル:
portlet.xml
※portlet.xmlはポートレット間連携定義エディタで選択したポートレットの関連portlet.xmlです。
更新内容:
portlet.xml(フォーマット)
名前空間を使用する が選択されている場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event xmlns:
		接頭辞
		='
		名前空間
		'>
      <qname>
		接頭辞
		:
		イベント名
		</qname>
    </supported-publishing-event>
		
  </portlet>
……
  <event-definition xmlns:
		接頭辞
		='
		名前空間
		'>
    <qname>
		接頭辞
		:
		イベント名
		</qname>
    <value-type>
		イベントペイロードの型
		</value-type>
  </event-definition>
		
……
</portlet-app>

名前空間を使用する が選択されていない場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event>
      <name>
		イベント名
		</name>
    </supported-publishing-event>
		
  </portlet>
……
  <event-definition>
    <name>
		イベント名
		</name>
    <value-type>
		イベントペイロードの型
		</value-type>
  </event-definition>
		
……
</portlet-app>

太字部分は削除内容です。

Memo
「<event-definition>」要素の定義は他のイベントが利用している場合、「<event-definition>」要素の定義は削除しません。


portlet.xml(例)
イベント名 = eventName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
イベントペイロードの型 = java.lang.String
※他のイベントは「<event-definition>」要素の定義が利用していません。
名前空間を使用する が選択されている場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event xmlns:prefix='http://com.nec.webotx'>
      <qname>prefix:eventName</qname>
    </supported-publishing-event>
  </portlet>
……
  <event-definition xmlns:prefix='http://com.nec.webotx'>
    <qname>prefix:eventName</qname>
    <value-type>java.lang.String</value-type>
  </event-definition>
……
</portlet-app>

名前空間を使用する が選択されていない場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-publishing-event>
      <name>eventName</name>
    </supported-publishing-event>
  </portlet>
……
  <event-definition>
    <name>eventName</name>
    <value-type>java.lang.String</value-type>
  </event-definition>
……
</portlet-app>


[受信イベントの更新ファイルの仕様]

更新ファイル:
portlet.xml
※portlet.xmlはポートレット間連携定義エディタで選択したポートレットの関連portlet.xmlです。
更新内容:
portlet.xml(フォーマット)
送信イベントの削除更新ファイルの仕様 と大体一致ので、上記の内容を参照してください。
名前空間を使用する が選択されている場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-processing-event xmlns:
		接頭辞
		='
		名前空間
		'>
      <qname>
		接頭辞
		:
		イベント名
		</qname>
    </supported-processing-event>
		
  </portlet>
……
  <event-definition xmlns:
		接頭辞
		='
		名前空間
		'>
    <qname>
		接頭辞
		:
		イベント名
		</qname>
    <value-type>
		イベントペイロードの型
		</value-type>
  </event-definition>
		
……
</portlet-app>

名前空間を使用する が選択されていない場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-processing-event>
      <name>
		イベント名
		</name>
    </supported-processing-event>
		
  </portlet>
……
  <event-definition>
    <name>
		イベント名
		</name>
    <value-type>
		イベントペイロードの型
		</value-type>
  </event-definition>
		
……
</portlet-app>

太字部分は削除内容です。
変更点:<supported-publishing-event> → <supported-processing-event>
プロジェクト・エクスプローラ・ビューの更新
「portlet.xml」ファイルを更新すると、プロジェクト・エクスプローラ・ビューも更新します。削除したイベントノードも削除します。

2.8.6. パブリックレンダーパラメータを利用する場合

2.8.6.1. ポートレット間連携定義エディタでパブリックレンダーパラメータの新規作成

非参照のポートレットがポートレット間連携定義エディタで追加された後で、パブリックレンダーパラメータを新規作成できます。

[パブリックレンダーパラメータの新規作成の方法]

ポートレット間連携定義エディタは三つパブリックレンダーパラメータの新規作成の方法が提供されています。
パブリックレンダーパラメータの追加ボタン
ポートレットを選択して、ポートレット名の右側にある「 」(パブリックレンダーパラメータの追加ボタンと呼びます)をクリックすると、パブリックレンダーパラメータの追加メニューが出てくる。 パブリックレンダーパラメータ を選択すると、新しいパブリックレンダーパラメータが選択しているポートレットに追加されます。


図2.8.6.1-1



図2.8.6.1-2


コンテキスト・メニュー
ポートレットを右クリックして、出てくるコンテキストメニューの ノードの追加パブリックレンダーパラメータ を選択すると、新しいパブリックレンダーパラメータが選択しているポートレットに追加されます。


図2.8.6.1-3



図2.8.6.1-4


ドラッグ・ドロップ
ポートレット間連携定義エディタで、既存のパブリックレンダーパラメータをドラッグ・ドロップして、連携の先パブリックレンダーパラメー・EEE^を新規作成できます。追加されたパブリックレンダーパラメータの属性値は既存のパブリックレンダーパラメータにより設定します。
表2.8.6.1-1
属性 新規作成のパブリックレンダーパラメータ
パブリックレンダーパラメータ名 既存のパブリックレンダーパラメータの「パブリックレンダーパラメータ名」の値と同じです。
識別子 既存のパブリックレンダーパラメータの「識別子」の値と同じです。
名前空間を使用する 既存のパブリックレンダーパラメータの「名前空間を使用する」の値と同じです。
名前空間 既存のパブリックレンダーパラメータの「名前空間」の値と同じです。
接頭辞 既存のパブリックレンダーパラメータの「接頭辞」の値と同じです。
同時に、連携の結線も作成します。


図2.8.6.1-5



図2.8.6.1-6



[パブリックレンダーパラメータの新規作成のルール]

パブリックレンダーパラメータを新規追加する場合、以下のルールに従います。
A)     追加先のポートレットに同じ定義のパブリックレンダーパラメータがありません。
B)     パブリックレンダーパラメータ名 は自動的にparam_Nになります。Nは自然数です。
パブリックレンダーパラメータ名 が重複した場合、NはN+1になります。
C)     追加位置はポートレットの一番後ろです。
D)    追加されたパブリックレンダーパラメータはデフォルトで 名前空間 が使用していません。
※ドラッグ・ドロップで追加したパブリックレンダーパラメータは「D)」のルールに従っていません。

[パブリックレンダーパラメータの構成]


図2.8.6.1-7


表2.8.6.1-2
項目 説明
パブリックレンダーパラメータのアイコン パブリックレンダーパラメータを表すアイコンを表示します。
パブリックレンダーパラメータ名 パブリックレンダーパラメータ名を表示します。
パブリックレンダーパラメータの削除ボタン 当該パブリックレンダーパラメータを削除します。
文字列が長すぎて表示されない場合、一部のみを表示し、表示できる部分の末に…を付き、ツールチップで完全に表示します。


図2.8.6.1-8



[パブリックレンダーパラメータの基本操作]

◇  基本操作のルール
新規作成したパブリックレンダーパラメータについて以下のルールに従っています。
A)     サイズが変更できません。
B)     同じのポートレットに移動できません。
◇  パブリックレンダーパラメータのボーダーの表示
パブリックレンダーパラメータをマウスオーバーすると、パブリックレンダーパラメータのボーダーが表示されます。
例:パブリックレンダーパラメータ param_2 をマウスオーバーするのは示しています。


図2.8.6.1-9


◇  パブリックレンダーパラメータのボーダーの選択
新規作成したパブリックレンダーパラメータをマウスで左クリックすると、当該のパブリックレンダーパラメータが選択している状態になります。
選択している状態の表示は以下の通りです。
A)     パブリックレンダーパラメータ名 は太字で表示します。
B)     パブリックレンダーパラメータが所属するポートレットの背景は選択している色になります。


図2.8.6.1-10


C)     プロパティー・ビューで当該のパブリックレンダーパラメータの属性情報が表示されています。


図2.8.6.1-11


表2.8.6.1-3
項目 説明
パブリックレンダーパラメータ名 パブリックレンダーパラメータ名を表示します。
識別子 パブリックレンダーパラメータの識別子を指定します。
名前空間を使用する 名前空間を使用するかどうかを指定します。
名前空間 名前空間を指定します。
接頭辞 接頭辞を指定します。
名前空間を使用する がチェックされていない場合、 名前空間接頭辞 は入力できません。

[portlet.xmlファイルの反映]

エディタでパブリックレンダーパラメータを新規作すると、すぐに下記の記述が「portlet.xml」ファイル内容を更新します。
◇  送信パブリックレンダーパラメータの更新ファイルの仕様
更新ファイル:
portlet.xml
※portlet.xmlはポートレット間連携定義エディタで選択したポートレットの関連portlet.xmlです。
更新内容:
portlet.xml(フォーマット)
名前空間を使用する をONにした場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-public-render-parameter>識別子</supported-public-render-parameter>
  </portlet>
……
  <public-render-parameter xmlns: 接頭辞='名前空間'>
    <identifier>識別子</identifier>
    <qname>接頭辞:パブリックレンダーパラメータ名</qname>
  </public-render-parameter>
……
</portlet-app>

名前空間を使用する をOFFにした場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-public-render-parameter>識別子</supported-public-render-parameter>
  </portlet>
……
  <public-render-parameter>
    <identifier>識別子</identifier>
    <name>パブリックレンダーパラメータ名</name>
  </public-render-parameter>
……
</portlet-app>

太字部分は追加内容です。パブリックレンダーパラメータ名、名前空間、接頭辞、識別子はパブリックレンダーパラメータのプロパティー・ビューで入力した値です。
portlet.xml(例)
パブリックレンダーパラメータ名 = paramName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
識別子 = id
名前空間を使用する をONにした場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
  <supported-public-render-parameter>id</supported-public-render-parameter>
  </portlet>
……
  <public-render-parameter xmlns:prefix='http://com.nec.webotx'>
    <identifier>id</identifier>
    <qname>prefix:paramName</qname>
  </public-render-parameter>
……
</portlet-app>

名前空間を使用する をOFFにした場合
<?xml version='1.0' encoding='UTF-8' ?>
<portlet-app ……>
……
  <portlet>
……
    <supported-public-render-parameter>id</supported-public-render-parameter>
  </portlet>
……
  <public-render-parameter>
    <identifier>id</identifier>
    <name>paramName</name>
  </public-render-parameter>
……
</portlet-app>


[プロジェクト・エクスプローラ・ビューの反映]

「portlet.xml」ファイル内容を更新すると、プロジェクト・エクスプローラ・ビューで表示されているノードが更新されます。


図2.8.6.1-12


ポートレットデプロイメント記述子の直下に「param_1」ノードが追加されました。

2.8.6.2. ポートレット間連携定義エディタでパブリックレンダーパラメータの編集

パブリックレンダーパラメータの編集は二つ種類があります。
1、プロパティー・ビューを通じてパブリックレンダーパラメータ属性を修正して、ポートレット間連携を作成します。
2、コンテキスト・メニューを通じてパブリックレンダーパラメータに処理を生成します。

[プロパティー・ビューで属性の編集]

ポートレット参照の中のパブリックレンダーパラメータはパブリックレンダーパラメータ参照と呼びます。パブリックレンダーパラメータ参照はプロパティー・ビューで属性が編集できません。
パブリックレンダーパラメータ参照を選択した場合、以下のようなプロパティー・ビューが表示されます。


図2.8.6.2-1


上記以外の場合、ポートレット間連携定義エディタでパブリックレンダーパラメータを選択すると、以下のようなプロパティー・ビューが表示されます。


図2.8.6.2-2


この時、プロパティー・ビューをクリックしてプロパティー・ビューがアクティブ状態になると、パブリックレンダーパラメータの属性は編集できます。


図2.8.6.2-3


パブリックレンダーパラメータ定義プロパティー・ビューで入力内容の妥当性の検証に行っています。検証に失敗した場合、属性名が赤字になり、ツールチップでエラーメッセージが表示されます。
妥当性の検証ルールは下記のです。
表2.8.6.2-1
属性 入力内容 結果
パブリックレンダーパラメータ名 「英数字」、「_」、「-」、「.」 正常に表示します。
  「パブリックレンダーパラメータ名」が赤字になります。
エラーメッセージ:「パブリックレンダーパラメータ名を入力してください。」
  パブリックレンダーパラメータは既に存在しています※ 「パブリックレンダーパラメータ名」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}パブリックレンダーパラメータ名)。」
  無効文字(「英数字」、「_」、「-」、「.」以外) 「パブリックレンダーパラメータ名」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。パブリックレンダーパラメータ名には( 英数字_-. ) のみ利用できます。」
  命名ルール違反(数字、「.」、「-」で始まる)の入力 「パブリックレンダーパラメータ名」が赤字になります。
エラーメッセージ:「パブリックレンダーパラメータ名は( 数字.- )で始めることはできません。」
  命名ルール違反「.」で開始または終了 「パブリックレンダーパラメータ名」が赤字になります。
エラーメッセージ:「パブリックレンダーパラメータ名をドットで開始または終了することはできません。」
識別子 「英数字」、「_」、「-」、「.」 正常に表示します。
  「識別子」が赤字になります。
エラーメッセージ:「識別子を入力してください。」
  無効文字
無効効文字(「英数字」、「_」、「-」、「.」以外)
「識別子」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。識別子には( 英数字_-. ) のみ利用できます。」
  命名ルール違反(数字、「.」、「-」で始まる)の入力 「識別子」が赤字になります。
エラーメッセージ:「識別子は( 数字.- )で始めることはできません。」
  命名ルール違反「.」で開始または終了 「識別子」が赤字になります。
エラーメッセージ:「識別子をドットで開始または終了することはできません。」
  識別子が既に別のパブリックレンダーパラメータに使われている場合 「識別子」が赤字になります。
エラーメッセージ:「識別子が既に別のパブリックレンダーパラメータに使われていますので、その他のを指定してください。」
名前空間を使用する パブリックレンダーパラメータは既に存在しています※ 「名前空間を使用する」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}パブリックレンダーパラメータ名)。」
  上記以外の場合 正常に表示します。
名前空間 有効文字(「英数字」、「_」、「-」、「.」) 正常に表示します。
  「名前空間」が赤字になります。
エラーメッセージ:「名前空間を入力してください。」
  パブリックレンダーパラメータは既に存在しています※ 「名前空間」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}パブリックレンダーパラメータ名)。」
  無効文字
無効効文字(「英数字」、「_」、「-」、「.」以外)
「名前空間」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。名前空間には( 英数字_-.)のみを指定できます。」
接頭辞 「英数字」、「_」、「-」、「.」 正常に表示します。
  「接頭辞」が赤字になります。
エラーメッセージ:「接頭辞を入力してください。」
  パブリックレンダーパラメータは既に存在しています※ 「接頭辞」が赤字になります。
エラーメッセージ:「この名前を持つQNameは既に存在します(QName = {名前空間}パブリックレンダーパラメータ名)。」
  無効文字
無効効文字(「英数字」、「_」、「-」、「.」以外)
「接頭辞」が赤字になります。
エラーメッセージ:「[{0}]は無効文字です。接頭辞には( 英数字_-. )のみを指定できます。」
  命名ルール違反(数字、「.」、「-」で始まる)を入力 「接頭辞」が赤字になります。
エラーメッセージ:「接頭辞は( 数字.- )で始めることはできません。」
※パブリックレンダーパラメータは既に存在するかどうかの判断ルールは下記になります。
1、同一の「portlet.xml」内
2、「識別子」の値は同じ
エラーがある場合、以下のようなイメージを示します。


図2.8.6.2-4


パブリックレンダーパラメータ定義のプロパティー・ビューでパブリックレンダーパラメータ定義が変更されており、アクティブ状態から非アクティブ状態になると、変更の属性値はすぐに「portlet.xml」に更新します。
◇  portlet.xmlファイルの更新
イベント定義のプロパティー・ビューでパブリックレンダーパラメータ定義が変更されており、エラーがない場合、アクティブ状態から非アクティブ状態になると、変更の属性値はすぐに「portlet.xml」に更新します。
エラーがある場合、全ての変更した属性値は「portlet.xml」に更新しません。
◇  プロジェクト・エクスプローラ・ビューの更新
「portlet.xml」を更新した後で、プロジェクト・エクスプローラ・ビューでパブリックレンダーパラメータノードも更新します。

[パブリックレンダーパラメータに処理の生成]

ポートレット間連携定義エディタはパブリックレンダーパラメータの処理を生成できます。
ポートレット間連携定義エディタの上にあるパブリックレンダーパラメータを右クリックすると、コンテキスト・メニューが表示されます。


図2.8.6.2-5


◇  ポートレットクラスのJavaファイルの更新
更新ファイル:
ポートレットクラスのJavaファイル
※ポートレットクラスのJavaファイルはポートレット間連携定義エディタで選択したポートレットの関連Javaファイルです。
更新内容:
ポートレットクラスのJavaファイル(フォーマット)
public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOExceptionメソッドが存在している場合。processActionメソッド内に以下を追加。
……
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
……
    String publicRenderParamValue = request.getParameter("識別子");
    response.setRenderParameter("識別子", publicRenderParamValue);
  }
……

太字部分は追加内容です。
ポートレットクラスのJavaファイル(例)
パブリックレンダーパラメータ名 = paramName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
識別子 = id
……
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
……
    String publicRenderParamValue = request.getParameter("id");
    response.setRenderParameter("id", publicRenderParamValue);
  }
……

public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOExceptionメソッドが存在しない場合。以下を追加。
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
    String publicRenderParamValue = request.getParameter("識別子");
    response.setRenderParameter("識別子", publicRenderParamValue);
  }

太字部分は追加内容です。
ポートレットクラスのJavaファイル(例)
パブリックレンダーパラメータ名 = paramName
名前空間 = http://com.nec.webotx
接頭辞 = prefix
識別子 = id
  public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
    String publicRenderParamValue = request.getParameter("id");
    response.setRenderParameter("id", publicRenderParamValue);
  }

◇  ポートレットクラスのJavaファイルの表示
ポートレットクラスのJavaファイルを更新すると、Javaエディタを開きます。更新したJavaファイルの内容が表示されます。


図2.8.6.2-6


2.8.6.3. ポートレット間連携定義エディタでパブリックレンダーパラメータの削除

[パブリックレンダーパラメータの削除の方法]
ポートレット間連携定義エディタは2つパブリックレンダーパラメータの削除の方法が提供されています。

[パブリックレンダーパラメータの削除ボタン]

パブリックレンダーパラメータを選択して、パブリックレンダーパラメータ名の右側にある「 」(パブリックレンダーパラメータの削除ボタンと呼びます)をクリックすると、パブリックレンダーパラメータの削除の確認ダイアログが表示されます。


図2.8.6.3-1


はい をクリックすると、当該のパブリックレンダーパラメータを削除します。
同時に、削除したパブリックレンダーパラメータに対する全てのポートレット間連携の結線が削除されます。

[コンテキスト・メニュー]

パブリックレンダーパラメータを選択して、右クリックすると、パブリックレンダーパラメータのコンテキスト・メニューが表示されます。 パブリックレンダーパラメータ定義の削除 を選択すると、パブリックレンダーパラメータの削除の確認ダイアログが表示されます。確認ダイアログは パブリックレンダーパラメータの削除ボタン と同じです。


図2.8.6.3-2



[キーボードの「Delete」キー]

パブリックレンダーパラメータを選択して、キーボードの「Delete」キーを押すと、パブリックレンダーパラメータの削除の確認ダイアログも表示されます。確認ダイアログは パブリックレンダーパラメータの削除ボタン と同じです。
[パブリックレンダーパラメータの削除のルール]
パブリックレンダーパラメータを削除する場合、以下のルールに従います。
ポートレット参照 にパブリックレンダーパラメータが削除できません。
「portlet.xml」ファイルの更新
ポートレットの非表示する時に、「portlet.xml」ファイルは更新しません。
ロジェクト・エクスプローラ・ビューの更新
ポートレットの非表示する時に、ロジェクト・エクスプローラ・ビューも更新しません。

2.8.7. ポートレット間連携定義エディタでポートレット間連携の表示

ポートレット間連携定義エディタはイベント/パブリックレンダーパラメータの連携情報を自動的に洗い出し、結線でポートレット間連携を表示します。ポートレット間連携は一目瞭然です。
以下の状況で自動結線処理を呼び出します。
?   ポートレット(参照と非参照両方)を追加します。
?   送信イベントを追加します。
?   受信イベントを追加します。
?   パブリックレンダーパラメータを追加します。
?   ワークスペース上で開かれているポートレットプロジェクトに含まれるポートレットを全て読み込んで起動します

2.8.7.1. ポートレット間連携の表示

ポートレット間連携定義エディタは結線を利用してポートレット間連携を表示します。

[イベント間の結線]


図2.8.7.1-1



[パブリックレンダーパラメータ間の結線]


図2.8.7.1-2


表2.8.7.1-1
項目 説明
実線 イベント/パブリックレンダーパラメータの連携関係を表示します。
アンカー 他のイベント/パブリックレンダーパラメータとの接続線を結ぶ起点と終点を表示します。
結線を表示する時に、アンカーは自動的に追加されます。
左側または右側に表示されます。
ベント・ポイント ドラッグ・ドロップできます。ドラッグ・ドロップをすると、結線が折り曲げられます。
矢印 送受信の方向を表示します。
(イベントの結線のみ)
アンカー表示について下図のような規則に従います。
■一つ連携がある場合、一方を固定にして別の方が最右側から最左側へ移します。


図2.8.7.1-3


■二つ以上の連携がある場合、アンカーは両方で表示します。
例:Portlet2のアンカー


図2.8.7.1-4


2.8.7.2. ポートレット間連携の結線の生成ルール

属性により、ポートレット間連携の作成の判断ルールは下記です。

[イベントの連携]

1、両方の イベント名 の値は同じです。
2、両方の 種別 の値が異なります。
即ち、下記の表を従っています。
表2.8.7.2-1
イベント1の種別 イベント2の種別 結線可否
送信 受信
受信 送信
送信 送信 不可
受信 受信 不可
3、両方の 名前空間を使用する が選択されている場合、 名前空間接頭辞 の値は同じです。
4、両方の 名前空間を使用する も選択されていません。
5、 ペイロード型 の値は同じです。
6、上記の全てのルールも満足します。

[パブリックレンダーパラメータの連携]

1、両方の パブリックレンダーパラメータ名 の値は同じです。
2、両方の 名前空間を使用する が選択されている場合、 名前空間接頭辞 の値は同じです。
3、両方の 名前空間を使用する も選択されていません。
4、上記の全てのルールも満足します。

2.8.7.3. ポートレット間連携の結線の基本操作


[結線の型の変更]

ベント・ポイントをドラッグ・ドロップの操作を通じて結線の型を変更できます。
1、結線を選択して、ベント・ポイントが表示されます。


図2.8.7.3-1


2、マウスはベント・ポイントの上で移動して、ベント・ポイントをドラッグします。


図2.8.7.3-2


3、ドロップすると、結線の型は変更します。同時に、二つ新しいベント・ポイントが表示されます。


図2.8.7.3-3


4、新しいベント・ポイントもドラッグ・ドロップできます。そうすると、結線は直交線に変更します。


図2.8.7.3-4


※結線を変更した後で、ポートレットの追加、移動、非表示やイベント/パブリックレンダーパラメータの新規追加、編集、削除する操作をすると、ベント・ポイントは自動的に削除します。

2.9. ドラックアンドドロップ(D&D)を利用したポートレット間連携の作成

マウス操作のドラッグとドロップでデータを連携する方法について説明します。

2.9.1. ドラッグ&ドロップが可能な範囲

マウス操作のドラッグとドロップでデータ連携が可能なのは以下の範囲です。
  1. ある1つのポートレット内の画面
  2. 同一ポータルページ内に貼り付けられているポートレット間

2.9.2. ドラッグ&ドロップの定義と種類

WebOTX Developer では簡単にドラッグ&ドロップが定義できるようカスタムタグを提供しており、それを利用して作成します。 ドラッグするソースは <otxp:drag> タグを利用し、ドロップするターゲットは <otxp:drop> タグを利用します。
ドラッグ&ドロップの方法について以下の2通りをサポートしています。
方法 概要
ブラウザ経由 ブラウザ上でのみデータをやり取りする方法です
サーバ経由 ブラウザ上に加え、サーバ側でもデータをやり取りする方法です
以降の節で各方法について説明いたします。
なお、WebOTX Developer ではポートレットウィザードのオプションの1つに各ドラッグ&ドロップの方法毎に雛形コード を生成する機能を提供しています。詳細は ポートレットウィザードの利用 を参照して下さい。

Memo
各タグの詳細は WebOTXポートレットタグライブラリ を参照して下さい。

2.9.3. ブラウザ経由

ブラウザ経由のドラッグ&ドロップはブラウザ上でのみデータのやり取りを行う方法です。 以下のような場合が挙げられます。
[リストの並べ替え]
aaa のタグが ドラッグ&ドロップ で ddd のところにドロップできるようになります。


図2.9.3-1


[テキストボックスへの文字の挿入]
ドラッグした文字列をテキストボックスやテキストエリアに挿入できるようなります。


図2.9.3-2


2.9.3.1. ドラッグ側 JSP の定義

ドラッグ側は <otxp:drag> タグを利用してドラッグ可能な HTML タグを指定します。
以下に簡単な定義例を示していますが、ドラッグするソースは <otxp:drag> タグの子要素の内 class属性に 「otxpDndItem」 が指定されたものが対象です。ドロップするターゲットは、 <otxp:drop> タグに囲まれた範囲が対象になります。 以下の例ではブラウザ上、 「Item 1」をドラッグでき、「以下にドロップ可能」の直下にドラッグすることができます。
<otxp:drag id="drag1" >
<div class="otxpDndItem">Item 1</div> 
</otxp:drag>

以下にドロップ可能
<otxp:drop id="drop1">
</otxp:drop>
Memo
class="otxpDndItem" を指定してドラッグ可能となるHTML要素は以下の通りです。

otxpDndItem のクラス属性の指定は、ネストした子要素のタグにも指定した場合、親タグのみドラッグ可能とします。
以下に指定方法とドラッグ可能範囲をしめします。


図2.9.3.1-1


箇所 ドラッグ可否
? 可能
? 不可
? 可能 (Item 3と Item 4をまとめた Drag)
? 不可
? 不可

ドラッグ側のJSPファイルでの使用例:
<otxp:drag id="drag1" 
           model="client"
           onDndSourceOver="<portlet:namespace />_onDndSourceOver" 
           onDndStart="<portlet:namespace />_onDndStart"
           onDndCancel="<portlet:namespace />_onDndCancel"
           copyOnly="false">
    <div class="otxpDndItem">abc</div>
<div>def</div>
</otxp:drag>
<script type="text/javascript">
  function <portlet:namespace>_onDndSourceOver(){ … }
  function <portlet:namespace>_onDndStart(){ … }
  function <portlet:namespace>_onDndCancel() { … }
</script>

2.9.3.2. ドロップ側 JSP の定義

ドロップ側は <otxp:drop> タグを利用してドロップ可能な HTML タグを指定します。
<otxp:drop> タグで囲まれた範囲がドロップ可能な範囲となります。以下に利用例を示します。
<otxp:drop id="drop1"
           model="client"
           accept="dragId" 
           onDndDrop="<portlet:namespace />_onDndDrop()" 
           onDndDropBefore="<portlet:namespace />_onDndDropBefore()">
   ? ここに Drop 可能 ?
</otxp:drop>
<script type="text/javascript">
  function <portlet:namespace>_onDndDrop(){ … }
  function <portlet:namespace>_onDndDropBefore(){ … }
</script>

2.9.3.3. テキスト入力系へのドロップ

<otxp:drop> タグの子要素に <input type="text" class="otxpDndItem"> 等のユーザ入力系のタグを追加するだけで、 それらの入力フィールドに文字列をドロップ可能なようになります。
対象となる入力系のタグは以下となります。

以下に テキストボックス等を含めたドロップ箇所の指定方法とその時の動作を示します。
<otxp:drag id="dragzone1">
    <div class="otxpDndItem">Item Alpha</div>
    <div class="otxpDndItem">Item Beta</div>
    <div class="otxpDndItem">Item Gamma</div>
    <div class="otxpDndItem">Item Delta</div>
</otxp:drag>
<otxp:drop id="dropzone1" >
    <div>Item 1</div>
                            ← テキストボックスの前
    <input type="text" class="otxpDndItem" />   ← テキストボックスの中
                            ← テキストボックスの後
    <div>Item 2</div>
    <div>Item 3</div>
</otxp:drop> 

上記の様な場合、以下に示す様にどこにドロップするのかが分かるUIとなります。


図2.9.3.3-1


Memo
Firefoxでドロップしてからテキストボックスに入力する場合、フォーカスが移らない場合があります。 その場合、右クリックまたはタブキーでフォーカスを移す必要があります。


複数のHTML要素をドロップする場合、テキストボックスにドロップされる文字列は、各要素の値を連結した文字列となります。 下記の例では 「Item Y Item Z」となります。
<otxp:drag id="dragId">
    <div class="otxpDndItem">
        <div>Item Y</div>
        <div>Item Z</div>
    </div>
</otxp:drag>
 
<otxp:drop id="dropId" accept="dragId">
    <input class="otxpDndItem" type="text"/>
</otxp:drop>


図2.9.3.3-2

2.9.3.4. ドラッグソースの限定

複数あるドラッグソースの内、ある特定のドラッグソースのみをドロップ可能とするように限定することができます。

■一つ指定する場合:
ドロップできるのは?のドラッグソースだけです。


図2.9.3.4-1


■複数指定する場合:
ドロップできるのは、?と?の ドラッグソースです。


図2.9.3.4-2


■accept属性で指定したドラッグソース以外をドロップしようとした場合:
以下のように <otxp:drag id="AA"> で指定したドラッグソースを <otxp:drop id="drop2" accept="CC"> にドロップしようとした場合、accept 属性に指定された値と <otxp:drag> タグの id 属性の値が一致しないため、 ドロップできません。ドロップ不可の場合は以下のような UI を表示します。


図2.9.3.4-3


<otxp:drag id="AA"> 
    <div class="otxpDndItem">Item X</div> 
    <div class="otxpDndItem">Item Y</div> 
    <div class="otxpDndItem">Item Z</div> 
</otxp:drag> 
 
<otxp:drop id="drop2" accept="CC"> 
    <div class="otxpDndItem">Item Alpha</div> 
    <div class="otxpDndItem">Item Beta</div> 
    <div class="otxpDndItem">Item Gamma</div> 
    <div class="otxpDndItem">Item Delta</div> 
</otxp:drop> 


図2.9.3.4-4


Caution
ブラウザ経由のドラッグ&ドロップを行う場合は、<otxp:drag>、<otxp:drop> のmodel属性は client に統一して下さい。

2.9.4. サーバ経由

サーバ経由の場合、クライアント側でのデータの受け渡しの他に、サーバ側でクライアントで受け渡されたデータに紐づいたオブジェクトをやり取りします。
クライアント側からサーバ側を呼び出す際は非同期通信が行われます。非同期通信の詳細は Ajax を利用した部分更新の作成 を参照して下さい。

2.9.4.1. ドラッグ側 JSP の定義

JSP部分については、基本的にブラウザ経由と同等です。
<otxp:drag id="drag1"
           model="server"
           onDndSourceOver="<portlet:namespace />_onDndSourceOver" 
           onDndStart="<portlet:namespace />_onDndStart"
           onDndCancel="<portlet:namespace />_onDndCancel"
           copyOnly="false">
<div class="otxpDndItem">abc</div>
    <div>def</div>
</otxp:drag>
<script type="text/javascript">
  function <portlet:namespace>_onDndSourceOver(){ … }
  function <portlet:namespace>_onDndStart(){ … }
  function <portlet:namespace>_onDndCancel() { … }
</script>
■サーバへ送信するデータの指定
ドラッグ時にサーバ側で何かしらのデータを送信したい場合、ドラッグ要素に otxpDndSrc属性 を指定することで、サーバ側へデータを送信することができます。
otxpDndSrc属性 に指定した値はサーバへのリクエスト時のパラメータ(パラメータ名: otxpDndParam) としてサーバへ送信されます。

使用例:
<div class="otxpDndItem" otxpDndSrc="data">AAA</div>
■サーバへ送信するデータの指定
<otxp:drag> タグでload属性を指定しドラッグ側のサーバからのレスポンスを受け取り加工する場合、 加工したデータをドロップ側へ送信する場合は、関数中でデータを return する必要があります。
<otxp:drag id="drag1" model="server" load="<portlet:namespace />_load">
   <div class="otxpDndItem">abc</div>
</otxp:drag>

<script type="text/javascript">
  function <portlet:namespace />_load(response){ 
      // ドラッグ側のサーバからのレスポンスを取得
      var responseData = response;
             :
      // レスポンスデータに対してデータ編集
      responseData = responseData + "addData";
             :
      // 編集したデータを return する
      return responseData;
  }
</script>

2.9.4.2. ドラッグ側 Java の定義

ドラッグ側のJavaファイルでは serveResource関数 中にドラッグ時のサーバ側処理を記述します。関数中では、 requestオブジェクトから ResourceID を取得でき、この値が <otxp:drag> タグのID属性の値となります。 複数のドラッグ処理を記述する場合は、この ResourceID でどのタグの呼び出しであるかを区別する必要があります。
また、ドラッグ時にクライアント側から送られるデータは otxpDndParam というパラメータ名で取得することができます。
public serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException { 
      response.setContentType("text/xml");
      PrintWriter out = response.getWriter();
      String data = "";
      String resourceID = request.getResourceID();

      //drag側のサーバ処理
      if (resourceID.equals("<otxp:drag>のid属性")) {
           String param = request.getParameter("otxpDndParam");
           data = param;
      }
      
      out.write(data);
      out.close();
}

2.9.4.3. ドロップ側 JSP の定義

ブラウザ経由と同様に <otxp:drop> を用いて行います。
<otxp:drop id="drop1"
           model="server"
           handleAs="text"
           accept="server"
           onDndDrop="<portlet:namespace />_onDndDrop()" 
           onDndDropBefore="<portlet:namespace />_onDndDropBefore()"/>
           method="get"
           content="a=1&b=1"
           load="<portlet:namespace />_load()" 
           error="<portlet:namespace />_error()" 
           timeout="30" 
           handle="<portlet:namespace />_handle()" />
</otxp:drop>
<script type="text/javascript">
  function <portlet:namespace />_onDndDrop(){ … }
  function <portlet:namespace />_onDndDropBefore(){ … }
  function <portlet:namespace />_load(){ … }
  function <portlet:namespace />_error(){ … }
  function <portlet:namespace />_handle(){ … }
</script>

2.9.4.4. ドロップ側 Java の定義

ドラッグ側のサーバ処理と同様に serveResource関数 に処理を記述します。
ドラッグ側のload関数等で処理したデータは、 otxpDndResp のパラメータ名で取得できます。
public serveResource(ResourceRequest request, ResourceResponse response) 
throws PortletException, IOException { 
      response.setContentType("text/xml");
      PrintWriter out = response.getWriter();
      String data = "";
      String resourceID = request.getResourceID();

     //ドロップ側のサーバ処理
     if (resourceID.equals("[ドロップ側のid]")) {
           String param = request.getParameter("otxpDndResp");
           String a = request.getParameter("a");
           String b = request.getParameter("b");
           data  = "Drop Server!" + a + b + param;
      }
      
      out.write(data);
      out.close();
}

Caution
サーバ経由のドラッグ&ドロップを行う場合は、<otxp:drag> と <otxp:drop> のmodel属性は server に統一して下さい。

2.10. ポートレットウィンドウ状態を利用した表示切替の作成

ポートレットウィンドウ状態を利用して表示を変更する方法を示します。ポートレットウィンドウ状態はリクエストオブジェクトから getWindowState() 関数で取得することができます。WebOTX Portal では特に処理を行わなければ、 各ポートレットウィンドウ状態で同じ内容の表示を行います。 ポートレットウィンドウ状態で表示を変える場合、WebOTX Developer ではその程度により以下の2通りの方式を提供しています。

2.10.1. ポートレットウィンドウ状態でJSPファイルを分ける方式

ポートレットウィンドウ状態でまったく異なる画面表示を行うような場合に利用します。サーバ側でJSPをディスパッチする際に ポートレットウィンドウ状態を判別し、それぞれの状態にあったJSPファイルをディスパッチします。
WebOTX Developer ではポートレットウィザードで生成機能を提供しています。 詳細は 2.4. ポートレットウィザードの利用 を参照して下さい。 オプションページで 最大化標準切替に設定 を選択すると、最大化ウィンドウ状態と標準ウィンドウ状態で別々のJSPをディスパッチする処理がテンプレートに追加されます。

ポートレットのベースクラスには以下の処理が追加されます。
最大化ウィンドウ状態の場合は、portlet.xml で定義した MaxPage パラメータ で指定されたJSPファイルを、 標準ウィンドウ状態の場合は、 ViewPage パラメータ で指定されたJSPファイルをディスパッチします。
public class TestPortlet extends GenericPortlet {
    public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
        response.setContentType(request.getResponseContentType());
        String viewpage = "";
        
        if (request.getWindowState() == WindowState.MAXIMIZED) {
            viewpage = getPortletConfig().getInitParameter("MaxPage");
        } else {
            viewpage = getPortletConfig().getInitParameter("ViewPage");
        }
        
        PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(viewpage);
        rd.include(request, response);
    }
}
portlet.xml には以下のような設定が追加されます。
<portlet-app>
    <portlet>
        <init-param>
            <name>ViewPage</name>
            <value>/jsp/html/XXXView.jsp</value>
        </init-param>
        
        <init-param>
            <name>MaxPage</name>
            <value>/jsp/html/XXXViewMax.jsp</value>
        </init-param>
        
生成後、MaxPageのJSPファイルとViewPageのJSPファイルにそれぞれのポートレットウィンドウ状態で表示しようとしている内容を実装します。

2.10.2. 同一JSPファイル中で切り替える方式

最大化時に全画面を表示し、標準時は一部分のみを表示するような場合に利用します。同一JSP内でウィンドウ状態を判別して、 表示・非表示の処理を行います。
WebOTX Developer ではこのウィンドウ状態の判別を隠蔽したウィンドウ状態での表示切り替えのカスタムタグ <otxp:winstat> を提供しています。 これを利用することで簡単に実装することができます。 カスタムタグの詳細は WebOTXポートレットタグライブラリ を参照して下さい。

利用例:
下記では、AAA と CCC は標準ウィンドウ状態と最大化ウィンドウ状態で表示され、BBB は最大化ウィンドウ状態のみで表示されます。
<%@ taglib uri="http://www.nec.com/webotx/portlet" prefix="otxp"%>
<div>AAA</div>
<otxp:winstat viewStandard="maximized">
  <div>BBB</div>
</otxp:winstat>
<div>CCC</div>
Memo
WebOTXポートレットタグの追加は スニペット を利用するか、JSPファイルで Ctrl+スペース を押下すると以下のようなコードアシストが表示され、WebOTX の典型的なJSPタグコードを追加することができます。


図2.10.2-1


2.11. Ajax を利用した部分更新の作成

JSR 286 からポートレット内で部分的な更新が可能となりました。部分更新を行う場合は resourceURL を利用します。 WebOTX Developer ではこれら部分更新を簡単に行えるようにカスタムのタグ <otxp:ajax><otxp:call> を提供しています。 タグの詳細については、 WebOTXポートレットタグライブラリ を参照して下さい。
<otxp:ajax> タグを利用した定義方法を以下に示します。

2.11.1. クライアント側 JSP の定義

<otxp:ajax> をJSPファイルに定義することで、部分更新を行う定義をします。 load属性には部分更新のサーバ側の呼び出しが成功した場合にコールバックされる関数を定義し、 この関数中でサーバ側からのレスポンスを画面上に表示したり加工したりする処理を記述します。
error属性は、サーバ側の呼び出しが失敗したりタイムアウトが発生した場合にコールバックされる関数になります。

■JSPでの使用例:
<otxp:ajax id="ajax1"
           content="a:1" 
           load="<portlet:namespace />_load" 
           error="<portlet:namespace />_error" 
           timeout="30"/> 
<div id="<portlet:namespace />result"> </div> 
<script type="text/javascript">
function <portlet:namespace />_load(response, ioArgs){
    // サーバ側からのレスポンスデータ
    var repdata = response;
    
    // データを画面上の一部に表示
    dojo.byId("<portlet:namespace />result").innerHTML = repdata;
}
function <portlet:namespace />_error(){
     dojo.byId("<portlet:namespace />result").innerHTML = "エラー発生";
}
</script>

2.11.2. サーバ側 Java

resourceURL を利用した部分更新のサーバ側の呼び出しは全て serveResource関数 の呼び出しとなります。
serveResource関数 中ではどの部分更新の呼び出しかを判定し処理を行います。<otxp:ajax> タグの場合、 ID属性の値数 がリソースIDの値となります。
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
    response.setContentType("text/xml");
    PrintWriter out = response.getWriter();
    String data = "";
    String resourceID = request.getResourceID();

    // リソースIDの判定
    if (resourceID.equals("ajax1")) {
        data = "Hello Ajax!";
    }

    out.write(data);
    out.close();
}

2.11.3. <otxp:ajax>タグの利用法

<otxp:ajax> タグだけでは、部分更新の準備をしただけで、 いつ部分更新を行うのかは別途呼び出し用のタグ <otxp:call> を利用して指定します。
<otxp:call> タグは<otxp:ajax> タグの呼び出しに実行時に展開されるため、 部分更新を行いたい箇所に<otxp:ajax> タグを定義します。
以下にボタンクリック時に<otxp:ajax> タグを呼び出す例を示します。
<otxp:ajax id="ajax1" … />
<input type="button" onclick="<otxp:call funcId="ajax1" />" />

2.11.4. 複数の部分更新定義時

同一ポートレット中で複数の部分更新を行う場合について以下に示します。

ポートレット上のVIEW画面で左のテキストボックスに対し、3つの異なる処理を実施するボタンでそれぞれ Ajax での呼び出しができるポートレットを例とします。


図2.11.4-1


2.11.4.1. クライアント側 JSP の定義

各部分更新ごとに <otxp:ajax>タグ を定義し、それぞれの ID属性は異なる値を指定します。
<otxp:ajax id="id_1" load="<porlet:namespace/>_load1()" …/>
<otxp:ajax id="id_2" load="<porlet:namespace/>_load2()" …/>
<otxp:ajax id="id_3" load="<porlet:namespace/>_load3()" …/>
<input type=”text” />
<input type="button" value="編集" onclick="<otxp:call funcId="id_1"/>" />
<input type="button" value="保存" onclick="<otxp:call funcId="id_2"/>" />
<input type="button" value="削除" onclick="<otxp:call funcId="id_3"/>" />
<script type="text/javascript">
  function <porlet:namespace/>_load1() { … }
  function <porlet:namespace/>_load2() { … }
  function <porlet:namespace/>_load3() { … }
</script>

2.11.4.2. サーバ側 Java の定義

serveResource 関数中では、<otxp:ajax> タグの ID属性に対応したリソースIDを判定し、 それぞれの部分更新での処理を実装します。
public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
    String resourceID = request.getResourceID();
    if (resourceID.equals("id_1")) {
        // 編集処理
    }else if (resourceID.equals("id_2")){
        // 保存処理
    } else if (resourceID.equals("id_3")){
        // 削除処理
    }
}

2.11.5. ポートレットウィザードでの雛形生成

WebOTX Developer ではポートレットウィザードでもオプションの1つとして雛形を生成することができます。 詳細は ポートレットウィザードの利用 を参照して下さい。
以下に生成される雛形コード例を示します。

2.11.5.1. クライアント側:JSPファイル

<otxp:ajax id="ajax1" load="<portlet:namespace/>_load" handleAs="text"/>
<script type="text/javascript">
function <portlet:namespace/>_load(data,ioargs) {
    dojo.byId("result").innerHTML = data;
}
</script>
<div id="result"></div>
<input type="button" value="Click" onclick="<otxp:call funcId="ajax1"/>" />

2.11.5.2. サーバ側:Javaファイル

public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
    response.setContentType("text/xml");
    PrintWriter out = response.getWriter();
    String data = "";
    String resourceID = request.getResourceID();

    if (resourceID.equals("ajax1")) {
        data = "Hello Ajax!";
    }

    out.write(data);
    out.close();
}

2.11.6. ポートレットからXMLHttpRequestを使用した場合のセッションタイムアウト

<otxp:ajax> を利用せずに、XMLHttpRequestを使用した場合に、セッションタイムアウトが発生していないか検出するコードを記述する必要があります。XMLHttpRequestを発行して返されたレスポンスデータのヘッダに、「X-WebOTX-Portal-Status」の値が400になっていれば、セッションタイムアウトが発生したことを意味します。

■JSPでの使用例:
function <portlet:namespace />_sendRequest(){
	// XMLHttpRequestを発行する
	dojo.xhrGet({
		url: "<%=rc_url%>",
		handleAs: "text",
		timeout: 10000,
		sync: false,
		load: function(responseData, ioArgs){
			var resStatus = ioArgs.xhr.getResponseHeader("X-WebOTX-Portal-Status");
			if(resStatus === "400"){
				// セッションタイムアウトが発生した場合の処理
			}
			else if(resStatus === "500"){
				// サーバでエラーが発生した場合の処理。
			}
			else{
				// 通信が正常に終了した場合の処理
			}
		},
		error: function(error, ioArgs){
			alert("error!");
		}
	});
}

2.12. SWFアプリケーションを利用したポートレットの作成

ポートレット中にSWFアプリケーションを表示しポータルページ上で利用することができるようになります。
WebOTX Developer ではSWFアプリケーションを表示するためのカスタムタグライブラリ <otxp:swf> を提供しており、これを利用して作成します。

定義方法は以下のように利用したいSWFアプリケーションのURLを <otxp:swf> のURL属性に指定するだけになります。
<otxp:swf url="http://SWFアプリケーションのURL"/>
また、WebOTX Developer ではポートレットウィザードでもオプションの1つとして雛形を生成することができます。 詳細は ポートレットウィザードの利用 を参照して下さい。

2.13. 他システム連携ポートレットの作成

ポータルの導入理由の一つに、既存システムをポータルに集約するということがあります。 その際、既存システムの種類(実装形態)に応じて、ポータル上での利用方法が異なってきます。
ポータル上での利用の形態応じて以下のように方法が幾つかあります。
表2.13-1
利用形態 概要
ビルトインポートレットを利用 既存システムの画面をポータルページ上に表示し使用できればよい場合。 ビルトインで提供されている コンテンツ表示ポートレット認証連携ポートレット を利用して表示する。
カスタムのコンテンツ表示ポートレットを利用 既存システムの画面をポータルページ上に表示したいがビルトインのポートレットでは対応が不十分な場合。 ちょっとした設定を保存したいなど、ビルトインで提供されている コンテンツ表示ポートレット の機能を ベースとして機能を付加したい場合。
ポートレットウィザードを利用して作成します。
ポートレットとして利用 既存システムの画面をポートレット用に分割して表示させたり、ポートレット間連携を行いたい場合等、 ポートレットとして最適化して利用したい場合。
既存の動的Webプロジェクトをポートレットプロジェクトへ変換等して、ポートレットとして再構築して 作成します。

それぞれの利用法について以下に説明します。

2.13.1. ビルトインポートレットを利用

ビルトインポートレット利用については、 コンテンツ表示ポートレット認証連携ポートレット を参照して下さい。

2.13.2. カスタムのコンテンツ表示ポートレットを利用

ビルトインポートレットの中核機能を実装したAPIを利用し、コンテンツ表示ポートレット相当の機能を有したカスタムポートレットを 作成します。
WebOTX Developer ではポートレットウィザードでカスタムのコンテンツ表示ポートレットの雛形を作成することができます。 詳細は ポートレットウィザードの利用 を参照して下さい。
表2.13.2-1
形式 説明
Iframeポートレット形式 ブラウザがクライアントとなってコンテンツを取得し、取得したコンテンツをインラインフレームに表示する方法です。

ポートレットウィザードページコンテンツ表示ポートレット の実装方式を選択して生成される雛形をベース に個人設定モードに独自の設定を追加したり等のカスタマイズを行います。
以下にAPIを利用したカスタマイズコードの一例を示します。
...
import java.io.*;
import javax.portlet.*;
import com.nec.webotx.portal.contentportlet.api.*;
public class TestPortlet extends GenericPortlet {
    public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
	
        // Get preference
        PortletPreferences prefs = request.getPreferences();

        // Get content url
        String src = prefs.getValue("URL", "http://host1.co.jp");

        // Get height(pixel)
        String height = prefs.getValue("HEIGHT", "500");

        // Get scroll
        String scroll = prefs.getValue("SCROLL", "auto");

        // Constructor
        response.setContentType("text/html");
        PrintWriter writer = response.getWriter();
        Locale locale = request.getLocale();
        IFrameComponent iFrameComponent;
        try {
            iFrameComponent = new IFrameComponent(src, writer, locale);
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return;
        }
        iFrameComponent.setHeight(height);
        iFrameComponent.setScrolling(scroll);
        // Set other attributes
        iFrameComponent.setIFrameAttribute("frameborder", "1");
        iFrameComponent.setIFrameAttribute("marginwidth", "10");
        // Print iframe tag
        iFrameComponent.generateContent();

    }
}
ポートレットウィザードで コンテンツ表示ポートレット を選択した場合、 ポートレットウィザード生成後に実行環境からJARファイルをプロジェクトにコピーします。
JARファイルのコピーに失敗した場合、以下のダイアログが表示されます。


図2.13.2-1

2.13.3. ポートレットとして利用

ポートレットプロジェクト変換等を利用して、ポートレットとして再構築を行います。
ポートレットプロジェクト変換については ポートレットプロジェクトへの変換 を参照して下さい。

2.14. ポートレット参照の利用

ユーザが外部からインポートするポートレットをポートレット間連携定義エディタで利用できるようにするため、ポートレット参照ウィザードを提供しています。

2.14.1. ポートレット参照の起動

【起動方式1】
ポートレットプロジェクトを右クリックすると以下のように ポータルポートレット参照 メニューを表示します。


図2.14.1-1


【起動方式2】
ポートレット参照のノードを右クリックすると ポートレット参照の追加 とのメニューを表示します。


図2.14.1-2


ポートレット参照 をクリックすると、 ポートレット参照 ページが表示されます。


図2.14.1-3


ポートレット参照の項目について説明します。
表2.14.1-1
項目 説明
表示名 プロジェクトエクスプローラのツリーノード表示名です。
ワークスペースから作成 ワークスペースからportlet.xmlをインポートできます。
ファイルシステムから作成 ファイルシステムからportlet.xmlをインポートできます。
ポートレット参照 ページで ワークスペースから作成 を選択し、 参照 をクリックすると、 ファイルの選択 ダイアログが表示されます。


図2.14.1-4


当該のプロジェクトを除き、ワークスペース上で開かれているポートレットプロジェクトに含めて、上記のような構成を表示します。ファイルの種類は portlet.xml と固定します。
ポートレット参照 ページで ファイルシステムから作成 を選択し、 参照 をクリックすると、 ファイルの選択 ダイアログが表示されます。ファイルの種類は portlet.xml と固定します。


図2.14.1-5


インポートした参照用ポートレットはエクスプローラで以下のように表示します。


図2.14.1-6


これから、参照ポートレットをポートレット間連携定義エディタでドラッグアンドドロップすることができます。

2.14.2. ポートレット参照ノードの説明に記載

他の「portlet.xml」ファイルが参照できるため、ポートレット間連携定義エディタで「portlet.xml」のインポート機能を提供しています。インポートしたポートレットは「ポートレット参照」と呼ばれます。プロジェクト・エクスプローラ・ビューで「ポートレット参照」ノードで表示します。
ポートレット参照にはドラッグ・ドロップの操作を通じてポートレット間連携定義エディタで利用できます。
サービスリポジトリと連携する際にサービスリポジトリから取り込んだものをプロジェクトの下にフォルダーを作成して格納します。ワークスペース上の構成は以下のようになります。


図2.14.2-1


赤で囲んだポートレットアプリケーション名は2つの場合に分けて表示します。
・  サービスリポジトリからダウンロードした場合は、表示されているポートレットアプリケーション名は「サービス名」_「バージョン」を利用します。
・  外部(サービスリポジトリ以外)からインポートした場合は、表示されているポートレットアプリケーション名はユーザからウィザードで表示名を指定することで利用します。
ポートレット参照ノードはプロジェクト直下の「reference」フォルダの配下に「portlet.xml」ファイルの内容を反映し、ポートレットアプリケーション名の配下に「portlet.xml」を解析し、以下のようなノードを表示します。
□参照用「portlet.xml」のバージョンはv1.0である場合


図2.14.2-2


プロジェクトの直下に 「ポートレット参照]」とのノードを置きます。初期状態は展開していない状態です。
その直下にはポートレットアプリケーションを列挙します。表示名はポートレットアプリケーション名です。
表2.14.2-1
要素 子要素 子要素 表示名 アイコン
参照用portlet.xml 「ポートレット参照」を表示します。

ポートレットアプリケーション ポートレットアプリケーション名を表示します。

ポートレット要素 ポートレット要素のportlet-name要素の値を表示します。

Memo
参照用のアイコンは非参照用のアイコンの明るさを弱めて表示させたものです。


□参照用portlet.xmlのバージョンはv2.0である場合


図2.14.2-3


プロジェクトの直下に 「ポートレット参照]」とのノードを置きます。初期状態は展開していない状態です。
その直下にはポートレットアプリケーションを列挙します。表示名はポートレットアプリケーション名です。
その直下には以下の要素を列挙します。
・  <event-definition>
・  <filter>
・  <public-render-parameter>
・  <portlet>
該当する表示名は以下とします。
・  イベント
・  フィルター
・  パブリックレンダーパラメータ
・  ポートレット
イベントの直下に、<event-definition>要素の表示値はイベント名です。
イベント名の取得は二つの場合があります。
名前空間が指定されている場合、以下を示すように表示名とします。
<event-definition xmlns:接頭辞="名前空間">
    <qname>接頭辞:イベント名</qname>
    <value-type>イベントペイロードの型</value-type>
</event-definition>

名前空間が指定されていない場合、以下を示すように表示名とします。
<event-definition>
    <name>イベント名</name>
    <value-type>イベントペイロードの型</value-type>
</event-definition>

フィルターの直下には<filter>要素の<filter-name>要素の値を表示します。
パブリックレンダーパラメータの直下には<public-render-parameter>要素の<identifier>要素の値を表示します。
ポートレットの直下には以下の要素を列挙します。
・  <supported-publishing-event>
・  <supported-processing-event>
・  <supported-public-render-parameter>
<supported-publishing-event>ノードの表示名はイベント名です。
イベント名の取得は二つの場合があります。
名前空間が指定されている場合、以下を示すように表示名とします。
<supported-publishing-event xmlns:接頭辞="名前空間">
    <qname>接頭辞:イベント名</qname>
</supported-publishing-event>

名前空間が指定されていない場合、以下を示すように表示名とします。
<supported-publishing-event>
      <qname>イベント名</qname>
</supported-publishing-event>

<supported-processing-event>ノードの表示名もイベント名です。
イベント名の取得は二つの場合があります。
名前空間が指定されている場合、以下を示すように表示名とします。
<supported-processing-event xmlns:接頭辞="名前空間">
      <qname>接頭辞:イベント名</qname>
</supported-processing-event>

名前空間が指定されていない場合、以下を示すように表示名とします。
<supported-processing-event>
  <name>イベント名</name>
</supported-processing-event>

<supported-public-render-parameter>ノードの表示名は<identifier>要素の値を表示します。
表2.14.2-2
要素 子要素 子要素 子要素 表示名 アイコン
参照用portlet.xml 「ポートレット参照」を表示します。

ポートレットアプリケーション ポートレットアプリケーション名を表示します。

event-definition要素 「イベント」を表示します。

q-name要素 q-name要素の値を表示します。

filter要素 「フィルター」を表示します。

filter-name要素 filter-name要素の値を表示します。

public-render-parameter要素 「パブリックレンダーパラメータ」を表示します。

identifier要素 identifier要素の値を表示します。

portlet要素 「ポートレット」を表示します。

supported-publishing-event supported-publishing-event のq-name要素の値を表示します。

supported-processing-event supported-processing-event のq-name要素の値を表示します。

supported-public-render-parameter supported-public-render-parameter要素の値を表示します。

Memo
参照用のアイコンは非参照用のアイコンの明るさを弱めて表示させたものです。

2.15. ポートレットフィルターの作成

ポートレットフィルターは JSR 286 で新たに追加された機能です。
ポートレットフィルターを使用することで、リクエストおよびレスポンスをフィルタリングし、データ報の変換を行うことができます。

2.15.1. ポートレットフィルターのインタフェース

ポートレットフィルターインタフェースは以下の4つあります。
上記のポートレットフィルターインタフェースは全てjavax.portlet.filter.PortletFilteインタフェースで実装しています。
javax.portlet.filter.PortletFilteインタフェースで実装しなければならないメソッドは以下となります。
表2.15.1-1
メソッド 説明
void init(FilterConfig filterConfig) 初期化メソッドです。ポートレットフィルター処理が開始される際にポートレットコンテナによって呼び出されます。
void destroy() ポートレットフィルター処理の終了の際にポートレットコンテナによって呼び出されるメソッドです。
ActionFilter, RenderFilter, ResourceFilter, EventFilterインタフェースで実装しなければならないメソッドは以下となります。
表2.15.1-2
メソッド 説明
void doFilter(ActionRequest request, ActionResponse response, FilterChain chain) ポートレットフィルターが適用されるリクエスト/レスポンスがあるたびに呼び出されるメソッドです。
ポートレットフィルター関連のインタフェースとして、javax.portlet.filter. FilterChainインタフェースとjavax.portlet.filter.FilterConfigインタフェースがあります。詳細にはJavaポートレットAPIを参照してください。

2.15.2. ポートレットフィルターの定義

ポートレットフィルターはportlet.xmlにfilter要素とfilter-mapping要素とlifecycle要素で定義します。filter要素でフィルター名前とフィルターのクラス名とライフサイクルを定義し、filter-mapping要素でフィルターをとフィルター名前とマッピングするポートレット名を定義します。
以下にポートレットフィルターの定義例を示しています。
<filter>
<filter-name>TestFilter</filter-name>
  <filter-class>com.nec.portlet.TestPortlet</filter-class>
  <lifecycle>RENDER_PHASE</lifecycle>
  <lifecycle>ACTION_PHASE</lifecycle>
  <lifecycle>EVENT_PHASE</lifecycle>
  <lifecycle>RESOURCE_PHASE</lifecycle>
  <init-param>
    <description>foo</description>
    <name>time</name>
    <value>100</value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>TestFilter</filter-name>
  <portlet-name>TestPortlet</portlet-name>
</filter-mapping>

2.15.3. ポートレットフィルターウィザード

ポートレットフィルターウィザードでは、ポートレットフィルタークラスを作成して、ポートレットプロジェクト中のportlet.xmlファイルに作成するポートレットフィルターの定義を追加することができます。
ポートレットフィルターウィザードの起動方式は二種類があります。

[起動方式]

【起動方式1】
メニュー ファイル新規その他 を選択し、新規画面のポータル配下にポートレットフィルターが表示されます。


図2.15.3-1


【起動方式2】
ポートレットプロジェクトを右クリックすると以下のように ポータルポートレットフィルター メニューが表示されます。


図2.15.3-2



[ポートレットファイルターの作成ページ]

ポートレットフィルター を選択すると、ポートレットクラスの作成画面が表示されます。


図2.15.3-3


ポートレットフィルターの作成 ページについて説明します。
表2.15.3-1
項目 説明
プロジェクト名 ポートレットV2.0プロジェクト
ソース・フォルダ ポートレットプロジェクトのソース・フォルダ
パッケージ名 ポートレットフィルターのパッケージ名
名前 ポートレットフィルター名
スーパークラス ポートレットフィルターの継承するスーパークラス名
ソース・フォルダの 参照 をクリックすると、 ソース・フォルダの選択 ダイアログが表示されます。


図2.15.3-4



図2.15.3-5


パッケージ名の 参照 をクリックすると パッケージの選択 ダイアログが表示されます。


図2.15.3-6



図2.15.3-7


スーパークラス名の 参照 をクリックすると、 スーパーの選択 ダイアログが表示されます。


図2.15.3-8



図2.15.3-9


次へ をクリックすると、 ポートレットフィルターの情報 ページが表示されます。

[ポートレットファイルターの情報ページ]


図2.15.3-10


このページについて説明します。
表2.15.3-2
項目 説明
名前 filter要素とfilter-mapping要素の子要素であるfilter-name要素の値です。必須項目。
説明 filter要素の子要素であるdescription要素の値です。
ライフサイクル filter要素の子要素であるlifecycle要素です。四つの値が指定できます。
RENDER_PHASE
ACTION_PHASE
EVENT_PHASE
RESOURCE_PHASE
初期化パラメータ filter要素の子要素であるinit-param要素の定義です。name とvalueと descriptionとの子要素があります。
フィルターマッピング filter-mapping要素の子要素であるfilter-nameとportlet-name要素の値です。
初期化パラメータの右側の 追加 をクリックすると、 初期化パラメータ ダイアログが表示されます。


図2.15.3-11



図2.15.3-12


初期化パラメータ ダイアログの項目について説明します。
表2.15.3-3
項目 説明
名前 init-paramのname要素です。必須項目。
init-paramのvalue要素です。
説明 init-paramのdescription要素です。
初期化パラメータを入力し、OK をクリックすると、初期化パラメータをテーブルに反映します。


図2.15.3-13



図2.15.3-14


初期化パラメータテーブルにある行を選択し、 編集 をクリックすると、 初期化パラメータ ダイアログが表示されます。


図2.15.3-15



図2.15.3-16


初期化パラメータテーブルにある行を選択し、 削除 をクリックすると、該当の行を削除します。


図2.15.3-17


フィルターマッピングの右側の 追加 をクリックすると、 ポートレット名 ダイアログが表示されます。


図2.15.3-18



図2.15.3-19


ポートレット名 ダイアログの項目について説明します。
表2.15.3-4
項目 説明
ポートレット名 filter-mappingのfilter-name要素です。必須項目。ドロップダウンリストから該当のプロジェクトのポートレット名を選択することができます。
ポートレット名を選択し、OK をクリックすると、ポートレット名をフィルターマッピングテーブルに反映します。


図2.15.3-20



図2.15.3-21


フィルターマッピングテーブルにある行を選択し、 削除 をクリックすると、該当の行を削除します。


図2.15.3-22


ポートレットフィルター ウィザードを完了し、ポートレットフィルタークラスが開かれます。
作成したポートレットフィルタークラスを例を示しています。
クラス名.javaは以下に示す。
package パッケージ名;
 
import java.io.IOException;
import javax.portlet.*;
import javax.portlet.filter.*;
 
public class クラス名 extends スーパークラスimplements レンダーフィルター, アクションフィルター, イベントフィルター, リソースフィルター {
 
/**
* When the filter is initialized, it is executed only once.
*/
public void init(FilterConfig filterConfig) throws PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool.
 
}
 
// レンダーフィルターインタフェースの実装
/**
* It is a main body of the filter processing. When the filter is called, it
* is executed every time.
*/
public void doFilter(RenderRequest request, RenderResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}
 
// アクションフィルターインタフェースの実装
/**
 * It is a main body of the filter processing. When the filter is called, it
 * is executed every time.
 */
public void doFilter(ActionRequest request, ActionResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}
 
// イベントフィルターインタフェー??の実装
/**
 * It is a main body of the filter processing. When the filter is called, it
 * is executed every time.
 */
public void doFilter(EventRequest request, EventResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}
 
// リソースフィルターインタフェースの実装
/**
 * It is a main body of the filter processing. When the filter is called, it
 * is executed every time.
 */
public void doFilter(ResourceRequest request, ResourceResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}
 
/**
 * It is called when the filter is destroyed.
 */
public void destroy() {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool.
 
}
}

Javaファイルにおける項目について説明します。
表2.15.3-5
項目 説明
クラス名 指定したフィルターのJavaファイル名
スーパークラス フィルターの継承するスーパークラス
パッケージ名 フィルタークラスのパッケージ
レンダーフィルター javax.portlet.filter.RenderFilterのインタフェース(描画)
アクションフィルター javax.portlet.filter.ActionFilterのインタフェース(アクション)
イベントフィルター javax.portlet.filter.EventFilterのインタフェース(イベント)
リソースフィルター javax.portlet.filter.ResourceFilterのインタフェース(リソース)
ポートレットフィルターの情報画面でライフサイクルを指定する時、少なくとも一つのライフサイクルをチェックしている必要があります。チェックしたファイルサイクルに対して該当のインタフェースをポートレットフィルタークラスに実装します。
RenderFilterのインタフェースを実装するメソッドを示しています。
// レンダーフィルターインタフェースの実装
/**
 * It is a main body of the filter processing. When the filter is called, it
* is executed every time.
*/
public void doFilter(RenderRequest request, RenderResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}

ActionFilterのインタフェースを実装するメソッドを示しています。
// レンダーフィルターインタフェースの実装
/**
* It is a main body of the filter processing. When the filter is called, it
* is executed every time.
*/
public void doFilter(RenderRequest request, RenderResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}

EventFilterのインタフェースを実装するメソッドを示しています。
// イベントフィルターインタフェースの実装
/**
* It is a main body of the filter processing. When the filter is called, it
* is executed every time.
*/
public void doFilter(EventRequest request, EventResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}

ResourceFilterのインタフェースを実装するメソッドを示しています。
// リソースフィルターインタフェースの実装
/**
* It is a main body of the filter processing. When the filter is called, it
* is executed every time.
*/
public void doFilter(ResourceRequest request, ResourceResponse response, FilterChain chain) throws IOException, PortletException {
// TODO Stub method generated by NEC WebOTX Developer,  Portlet Tool. Filter’s logic must be implemented.
chain.doFilter(request, response);
}

2.16. 多言語

プロジェクトエクスプローラのポートレットデプロイメント記述子ノードの下であるポートレットを選択し、
右メニュー プロパティー設定 を選択すると、 プロパティーダイアログが表示されます。


図2.16-1

プロパティーダイアログダイアログでロケール設定情報を追加・編集・削除することができます。


図2.16-2


サポートしているロケールは以下に示します。
ロケール ロケール情報
default 未指定
ja 日本語
en 英語

ロケールのチェック状態と関連ファイルの追加および削除の関係は以下に示します。
ON にする OFF にする
< リソースファイル名 >.properties
< リソースファイル名 >_ja.properties
< リソースファイル名 >_en.properties
portlet.xml の <supported-locale> 内容 ×

ロケールのテーブルの右の 追加 をクリックして、ロケール情報の追加ダイアログが表示されます。


図2.16-3


ロケールのテーブルの右の 編集 をクリックして、ロケール情報の編集ダイアログが表示されます。


図2.16-4


ロケール情報の編集 ダイアログで 追加 ボタンをクリックして、 属性の追加 ダイアログが表示されます。


図2.16-5


ロケール情報の編集 ダイアログでテーブルから編集したい属性を選択して 編集 をクリックして、 属性の編集 ダイアログが表示されます。


図2.16-6


2.17. ポートレットアーカイブの作成

ポートレットアーカイブ(war)の作成法について説明します。
Java EE パースペクティブでポートレットプロジェクトの右クリックメニューの エクスポートWARファイル を選択し、 WARエクスポート ダイアログを表示します。


図2.17-1



図2.17-2


WARエクスポート ページについて説明します。
表2.17-1
項目 説明
Webプロジェクト 指定したポートレットプロジェクトです。
宛先 ポートレットのアーカイブを保存する場所です。
ターゲット・ランタイム デフォルト値はポータルサーバです。
ソース・ファイルのエクスポート ONにする場合、アーカイブにJava ソース ファイルを含みます。
既存ファイルを上書き 同名のファイルが存在した場合、上書きします。
宛先を指定し、 完了 をクリックすると、ポートレットアーカイブが作成されます。


図2.17-3


2.18. ポートレットの配備

2.18.1. 方法1:サーバで実行

サーバで実行の配備方法については、チュートリアルの1.1.3. ポートレットの配備 を参照してください。

2.18.2. 方法2:運用管理パースペクティブ

統合運用管理ツールを利用する配備方法については、こちらを参照してください。

2.18.3. 方法3:Web版運用管理コンソール

Web版運用管理コンソールを利用する配備方法については、こちらを参照してください。

2.19. ポートレットの実行

ブラウザーを起動して、http://ポータルサーバ名:ポート番号/webotxportal/login へアクセスします。 ログインウィンドウにユーザ名とパスワードを入力して、ログインします。テスト用サーバを利用する場合は (USER0000/空白以外の任意文字) です。


図2.19-1


ログインした後、ポートレットライブラリをクリックし、カタログ作成ポートレット新規ポートレット作成 をクリックします。


図2.19-2


追加したいポートレットを選択し、追加 ボタンをクリックします。


図2.19-3


追加されたポートレットが表示されます。


図2.19-4


2.20. ポートレットプロジェクトへの変換

既存の動的Webプロジェクトをポートレットプロジェクトへ変換することができます。変換の流れは以下の設定を推奨します。
変換する動的Webプロジェクトの右クリックメニュー プロパティー>プロジェクトファセット を選択して、プロジェクト・ファセットページで以下の設定を行ってください。
具体的には、ファセット一覧にJSR Portletを選択し、OKをクリックします。


図2.20-1

変換後はポートレットプロジェクトになっているので、ポートレットウィザードを利用してポートレットの開発が行えます。
ここでは、以下に例を挙げて説明します。
  1. WebAPPというプロジェクト名の動的Webプロジェクトを作成します。
  2. WebAPP/WebContentの配下にindex.jspというJSPファイルを作成します。
    index.jspの内容は以下のようになります。
    <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
       <head>
          <meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
          <title>Insert title here</title>
       </head>
       <body>
          Hello World!
       </body>
    </html>
    
  3. 作成した動的Webプロジェクトをポートレットプロジェクトに上記の変換流れのように変更します。
  4. HelloPortletというポートレット名のJSP/HTMLポートレットをポートレットウィザードを利用して作成します。
  5. 生成された portlet.xmlに以下のように変更します。
    <init-param>
       <name>ViewPage</name>
       <value>/index.jsp</value>
    </init-param>
    
  6. このポートレットを配備しポータルページに追加すると、Hello World!という文字列が表示されます。

2.21. API 一覧

WebOTX Portal が独自に提供するAPIは以下の通りです。
Java ポートレット仕様 V1.0/2.0のAPIはこちらを参照してください。

2.22. WebOTX ポートレットタグライブラリ

WebOTX Portal では以下のカスタムタグライブラリを提供しています。
表2.22-1
WebOTX ポートレットタグ名 概要
<otxp:winstat> ウィンドウ状態での画面の切り替えのカスタムタグです。
<otxp:swf> SWFアプリケーションを呼び出しカスタムタグです。
<otxp:drag> HTML上のDrag可能な箇所の指定とDrag時の動作を制御するカスタムタグです。
<otxp:drop> HTML上のDrop可能な箇所の指定とDrop時の動作を制御するカスタムタグです。
<otxp:ajax> ポートレット中で非同期の部分更新を定義するカスタムタグです。
<otxp:call> <otxp:ajax> タグで定義した処理を呼び出すカスタムタグです。

2.22.1. <otxp:winstat>

使用法:
<%@ taglib uri="http://www.nec.com/webotx/portlet" prefix="otxp"%>
<otxp:winstat viewStandard="[normal|maximized|all|none]">ユーザコンテンツ</otxp:winstat>
表2.22.1-1
属性名 デフォルト値 必須 説明
viewStandard 文字列 all × 表示する標準ウィンドウ状態を指定する。指定できる値は以下。
  • normal:標準状態時に表示する
  • maximized:最大化時に表示する
  • all:標準時、最大化時とも表示する
  • none:標準時、最大化時とも表示しない。

2.22.2. <otxp:swf>

使用法:
<%@ taglib uri="http://www.nec.com/webotx/portlet" prefix="otxp"%>
<otxp:swf url="[url]"
          id="[id]"
          width="[width]"
          height="[height]"
          flashVars="[flashVars]"
          params="[params]"/>
表2.22.2-1
属性名 デフォルト値 必須 説明
url 絶対URL なし swfのURLを指定します。
width 数値(pixels)または割合指定(%) なし × swfの幅を指定します。
height 数値(pixels)または割合指定(%) なし × swfの高さを指定します。
id 文字列 なし × IE:Web ブラウザなどのホスト環境におけるオブジェクトの識別子です。
Firefox:ムービーの名称を定義します。
flashvars 文字列
形式:「変数名1=値1&変数名2=値2…」
空文字列 × SWFアプリケーション内部で利用する任意の引数を指定します。
params 文字列
形式:「変数名1=値1&変数名2=値2…」
同じ変数名が指定された場合、最後の変数値が有効になります。
なし × SWF呼び出し時に必要なパラメータを指定します。

2.22.3. <otxp:drag>

使用法:
<otxp:drag id="[id]"
           model="[client|server]"
           copyOnly="[true|false]"
           onDndStart="[onDndStart]"
           onDndSourceOver="[onDndSourceOver]"
           onDndCancel="[onDndCancel]"
           handleAs="[text|json|json-comment-optional|json-comment-filtered|javascript|xml]"
           method="[get]"
           content="[content]"
           timeout="[timeout]"
           load="[load]"
           error="[error]"
           >
<div class="otxpDndItem otxpDndSrc="data">ドラッグコンテンツ</div>
</otxp:drag>
表2.22.3-1
属性名 デフォルト値 必須 説明
id 文字列(セミコロンを含めず) なし ドラッグソースとなる要素を特定するために使われます。同一のJSP内で一意な値を指定する必要があります。
model client|server client × サーバへ通信するかどうか判別するために使われます。
  • client(ブラウザ経由、ブラウザ上のみ)
  • server(サーバ経由、サーバへ通信する)
copyOnly true|false true × ブラウザ上のドラッグソースをコピーしてドラッグするか、カット&ペーストで移動するかを指定します。
  • true:ドラッグソースの要素をドロップターゲットにコピーします。
  • false:ドラッグソースの要素をカット&ペーストでドロップターゲットに貼り付けます。
onDndStart 文字列(JavaScript関数名) なし × クライアント側でドラッグ開始時のカスタム動作の関数名を指定します。
functionName(source,nodes,copy) のインターフェイスで定義します。
onDndSourceOver 文字列(JavaScript関数名) なし × クライアント側でDragソースにマウスを乗せた時のカスタム動作の関数名を指定します。
functionName(source) のインターフェイスで定義します。
onDndCancel 文字列(JavaScript関数名) なし × クライアント側でドロップ取消し時のカスタム動作の関数名を指定します。
functionName() のインターフェイスで定義します。
handleAs textのみ text × 受信時のレスポンスフォーマットを指定します。
method
  • get
get × HTTPリクエストのメソッドです。
content 文字列
形式:「変数名1:値1,変数名2:値2」
なし × クライアント側からサーバ側に送信するデータを指定します。複数ある場合は、カンマで区切ります。
timeout 整数 30 × タイムアウト時の時間を指定します。指定範囲:[0,3600]。0の場合はタイムアウトしません。
load 文字列(Javascript関数名) なし × HTTPレスポンスが成功を返した場合に呼ばれる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
error 文字列(Javascript関数名) なし × リクエストに失敗した場合やサーバエラーの場合に呼ばれる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
Memo
contentの値には「,」、「:」の文字が利用できません。また、文字列の前後の半角空白にはトリム処理を行います。

Memo
load属性に指定した関数で2バイト文字を返却したい場合、encodeURIComponentでエンコードする必要があります。
例:
function function OtxDrag<portlet:namespace />_myLoad(responseData) {
	var data1 = "データ";
	var responseData += encodeURIComponent( data1);
	return responseData;
}

2.22.4. <otxp:drop>

使用法:
<%@ taglib uri="http://www.nec.com/webotx/portlet" prefix="otxp"%>
<otxp:drop id="[id]"
           model="[client|server]"
           handleResponse="[handleResponse]"
           accept="[accept]"
           onDndDrop="[onDndDrop]" 
           onDndDropBefore="[onDndDropBefore]"
           handleAs="[text|json|json-comment-optional|json-comment-filtered|javascript|xml]"
           method="[get|post]"
           content="[content]"
           timeout="[timeout]" 
           load="[load]" 
           error="[error]" 
           handle="[handle]">
</otxp:drop>
表2.22.4-1
属性名 デフォルト値 必須 説明
id 文字列 なし Drop対象となる要素を特定するために使われます。同一のJSP内で一意な値を指定する必要があります。
model client|server client × サーバへ通信するかどうか判別するために使われます。
  • client(ブラウザ経由、ブラウザ上のみ)
  • server(サーバ経由、サーバへ通信する)
handleResponse 文字列(JavaScript関数名) なし × Drop側がclientの場合に Drag側のサーバレスポンスを扱う関数を指定します。
accept 文字列(変数1,変数2) なし × ドロップできるドラッグソースを限定するために使用します。ドロップ可能な <otxp:drag>タグのidを指定します。 複数指定する場合はカンマで区切ります。
onDndDrop 文字列(JavaScript関数名) なし × クライアント側でドロップ終了時のカスタム動作の関数名を指定します。
functionName(source, nodes, copy, target) のインターフェイスで定義します。
onDndDropBefore 文字列(JavaScript関数名) なし × クライアント側でドロップの前にカスタム動作の関数名を指定します。
handleAs
  • text
  • json
  • json-comment-optional
  • json-comment-filtered
  • javascript
  • xml
text × 受信時のレスポンスフォーマットを指定します。
method
  • get
  • post
get × HTTPリクエストのメソッドです。
content 文字列
形式:「変数名1:値1,変数名2:値2」
なし × クライアント側からサーバ側に送信するデータを指定します。複数ある場合は、カンマで区切ります。
timeout 整数(秒) 30 × タイムアウト時の時間を指定します。指定範囲:[0,3600]。0の場合はタイムアウトしません。
load 文字列(Javascript関数名) なし × HTTPレスポンスが成功を返した場合に呼ばれる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
error 文字列(Javascript関数名) なし × リクエストに失敗した場合やサーバエラーの場合に呼ばれる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
handle 文字列(Javascript関数名) なし × 通信終了時に成功、失敗に関わらずコールされる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
Memo
contentの値には「,」、「:」の文字が利用できません。また、文字列の前後の半角空白にはトリム処理を行います。

2.22.5. <otxp:ajax>

使用法:
<%@ taglib uri='http://www.nec.com/webotx/portlet' prefix='otxp'%>
<otxp:ajax id="[id]"
           handleAs="[text|json|json-comment-optional|json-comment-filtered|javascript|xml]"
           method="[get|post]"
           content="[content]"
           load="[load]"
           error="[error]"
           timeout="[timeout]"
           handle="[handle]"
/>
表2.22.5-1
属性名 デフォルト値 必須 説明
id 文字列 なし ajaxタグのIDを指定します。ajaxタグを呼び出す際に利用されます。同一のJSP内で一意な値を指定する必要があります。
handleAs
  • text
  • json
  • json-comment-optional
  • json-comment-filtered
  • javascript
  • xml
text × 受信時のレスポンスフォーマットを指定します。
method
  • get
  • post
get × HTTPリクエストのメソッドです。
content 文字列
形式:「変数名1:値1,変数名2:値2」
なし × クライアント側からサーバ側に送信するデータを指定します。複数ある場合は、カンマで区切ります。
timeout 整数 30 × タイムアウト時の時間を指定します。指定範囲:[0,3600]。0の場合はタイムアウトはしません。
load 文字列(Javascript関数名) なし × HTTPレスポンスが成功を返した場合に呼ばれる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
error 文字列(Javascript関数名) なし × リクエストに失敗した場合やサーバエラーの場合に呼ばれる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
handle 文字列(Javascript関数名) なし × 通信終了時に成功、失敗に関わらずコールされる関数を指定します。
functionName(response, ioArgs) のインターフェイスで定義します。
Memo
contentの値には「,」、「:」の文字が利用できません。また、文字列の前後の半角空白にはトリム処理を行います。

2.22.6. <otxp:call>

使用法:
<%@ taglib uri="http://www.nec.com/webotx/portlet" prefix="otxp"%>
<otxp:call funcId="[funcId]" type="[type]" />
表2.22.6-1
属性名 デフォルト値 必須 説明
funcId 文字列 なし 呼び出したい <otxp:ajax> タグのIDを指定します。
type ajax ajax × 呼び出すタグのタイプを指定します。

2.23. スニペット 一覧

2.23.1. WebOTX Portlet Tag

2.23.1.1. <otxp:winstat>

<otxp:winstat viewStandard="all"></otxp:winstat>

2.23.1.2. <otxp:swf>

<otxp:swf url="" id="" width="" height="" flashVars="" params="" />

2.23.1.3. <otxp:drag>

<otxp:drag id="drag_"
           model="client"
           copyOnly="true"
           onDndStart="<portlet:namespace />_onDndStart"
           onDndSourceOver="<portlet:namespace />_onDndSourceOver"
           onDndCancel="<portlet:namespace />_onDndCancel"
           handleAs="text"
           method="get"
           content=""
           timeout="30"
           load="<portlet:namespace />_load"
           error="<portlet:namespace />_error"
           handle="<portlet:namespace />_handle">
    <div class="otxpDndItem" otxpDndSrc="data">Content</div>
</otxp:drag>

2.23.1.4. <otxp:drag>(関数定義付き)

<otxp:drag id="drag_"
           model="client"
           copyOnly="true"
           onDndStart="<portlet:namespace />_onDndStart"
           onDndSourceOver="<portlet:namespace />_onDndSourceOver"
           onDndCancel="<portlet:namespace />_onDndCancel"
           handleAs="text"
           method="get"
           content=""
           timeout="30"
           load="<portlet:namespace />_load"
           error="<portlet:namespace />_error"
           handle="<portlet:namespace />_handle">
     <div class="otxpDndItem" otxpDndSrc="data">Content</div>
</otxp:drag>
<script type="text/javascript">
    function <portlet:namespace />_onDndStart(){
    }

    function <portlet:namespace />_onDndSourceOver(){
    }

    function <portlet:namespace />_onDndCancel(){
    }

    function <portlet:namespace />_load(){
    }

    function <portlet:namespace />_error(){
    }

    function <portlet:namespace />_handle(){
    }
</script>

2.23.1.5. <otxp:drop>

<otxp:drop id="drop_"
           model="client"
           accept=""
           onDndDropBefore="<portlet:namespace />_onDndDropBefore"
           onDndDrop="<portlet:namespace />_onDndDrop"
           handleAs="text"
           method="get"
           content=""
           timeout="30"
           load="<portlet:namespace />_load"
           error="<portlet:namespace />_error"
           handle="<portlet:namespace />_handle">
    <div class="otxpDndItem"></div>
</otxp:drop>

2.23.1.6. <otxp:drop>(関数定義付き)

<otxp:drop id="drop_"
           model="client"
           handleResponse="<portlet:namespace />_handleResponse"
           accept=""
           onDndDropBefore="<portlet:namespace />_onDndDropBefore"
           onDndDrop="<portlet:namespace />_onDndDrop"
           handleAs="text"
           method="get"
           content=""
           timeout="30"
           load="<portlet:namespace />_load"
           error="<portlet:namespace />_error"
           handle="<portlet:namespace />_handle">
    <div class="otxpDndItem"></div>
</otxp:drop>
<script type="text/javascript">
    function <portlet:namespace />_onDndDropBefore(){
    }

    function <portlet:namespace />_onDndDrop(){
    }

    function <portlet:namespace />_load(){
    }

    function <portlet:namespace />_error(){
    }

    function <portlet:namespace />_handle(){
    }

    function <portlet:namespace />_handleResponse(responseData){
    }
</script>

2.23.1.7. <otxp:ajax>

<otxp:ajax id="ajax_"
           method="get"
           content=""
           handleAs="text"
           timeout="30"
           load="<portlet:namespace />_load"
           error="<portlet:namespace />_error"
           handle="<portlet:namespace />_handle" />

2.23.1.8. <otxp:ajax>(関数定義付き)

<otxp:ajax id="ajax_"
           method="get"
           content=""
           handleAs="text"
           timeout="30"
           load="<portlet:namespace />_load"
           error="<portlet:namespace />_error"
           handle="<portlet:namespace />_handle" />
<script type="text/javascript">
    function <portlet:namespace />_load(){
    }

    function <portlet:namespace />_error(){
    }

    function <portlet:namespace />_handle(){
    }
</script>

2.23.1.9. <otxp:call>

<otxp:call funcId="" type="ajax"/>

2.23.2. WebOTX Portlet Javascript

2.23.2.1. 名前空間付きの関数

<portlet:namespace />_ func() {
      //TODO
}

2.23.3. WebOTX Portlet Java

2.23.3.1. ポートレットイベントの送信処理

public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException {
  try {
    javax.xml.namespace.QName qName = new javax.xml.namespace.QName("http://com.nec.webotx", "eventName", "prefix");
    java.lang.String data = "";
    response.setEvent(qName, data);
  } catch (Exception e) {
    e.printStackTrace();
  }
}

2.23.3.2. ポートレットイベントの受信処理

@javax.portlet.ProcessEvent(qname = "{http://com.nec.webotx}eventName")
public void handleEvent(EventRequest request, EventResponse response) throws PortletException, IOException {
  javax.portlet.Event event = request.getEvent();
  java.lang.String data = (java.lang.String) event.getValue();
}

2.23.3.3. パブリックレンダーパラメータの利用

public void processAction(ActionRequest request, ActionResponse response) throws PortletException,IOException {
  String publicRenderParamValue = request.getParameter("id");
  response.setRenderParameter("id",
  publicRenderParamValue);
}

2.23.3.4. ajax更新

public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
  String resourceID = request.getResourceID();
  PrintWriter writer;
  writer = response.getWriter();
  writer.print(“Hello Ajax!”);
}

2.23.3.5. 表示モードの描画処理

public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
}

2.23.3.6. 個人設定モードの描画処理

public void doEdit(RenderRequest request, RenderResponse response) throws PortletException, IOException {
}

2.23.3.7. ヘルプモードの描画処理

public void doHelp(RenderRequest request, RenderResponse response) throws PortletException, IOException {
}

2.23.3.8. 説明モードの描画処理

@RenderMode(name = "about")
public void doCustomAbout(RenderRequest request, RenderResponse response) throws PortletException, IOException {
}

2.23.3.9. 共用設定モードの描画処理

@RenderMode(name = "edit_defaults")
public void doCustomEditDefaults(RenderRequest request, RenderResponse response) throws PortletException, IOException {
}

2.23.3.10. プリファレンスの取得

PortletPreferences prefs = request.getPreferences();
String data = prefs.getValue("KEY_NAME", "");

2.23.3.11. プリファレンスの設定

PortletPreferences prefs = request.getPreferences();
prefs.setValue("PEF_KEY", "value");
try {
  prefs.store();
} catch (ValidatorException e) {
  // TODO handle the exception
  e.printStackTrace();
} catch (IOException e) {
  // TODO handle the exception
  e.printStackTrace();
}

2.23.4. Dojo部品

Caution
Dojo の dijit 部品利用時の作法
dojo のdiji部品を以下のように宣言的に定義した場合、dijit が定義された部分を含むHTML要素を parse する必要があります。 以下にdijit.form.TextBoxの例を示します。
また、scriptタグはJSPの一番最後に記述する必要があります。
例:
<div id ="<portlet:namespace/>Content">
  <input dojoType="dijit.form.TextBox" id="textBox_<portlet:namespace/>">
</div>

<script type="text/javascript" >
  dojo.require("dojo.parser");
  dojo.require("dijit.form.TextBox");
  dojo.parser.parse(dojo.byId("<portlet:namespace/>Content"));
</script>

2.23.4.1. ColorPalette部品

<div dojoType="dijit.ColorPalette" id="colorPalette_<portlet:namespace/>"></div>

2.23.4.2. Dialog部品

<div dojoType="dijit.Dialog" id="dialogOne<portlet:namespace />" title="Dialog Title"></div>
<input type="button" value="Show me!" onclick="show<portlet:namespace />()" />
<script type="text/javascript">
    function show<portlet:namespace />() {
         dijit.byId("dialogOne<portlet:namespace />").show();
    }
</script>

2.23.4.3. Editor部品

<div dojoType="dijit.Editor" name="field" id="editor_<portlet:namespace/>"></div>

2.23.4.4. Button部品

<button dojoType="dijit.form.Button"  type="button" label="Button" id="button_<portlet:namespace/>"></button>

2.23.4.5. CheckBox部品

<input dojoType="dijit.form.CheckBox" id="checkBox_<portlet:namespace/>" />

2.23.4.6. CombButton部品

<div dojoType="dijit.form.ComboButton" id="comboButton_<portlet:namespace/>"></div>

2.23.4.7. CurrencyTextBox部品

<input type="text" dojoType="dijit.form.CurrencyTextBox" id="currencyTextBox_<portlet:namespace/>" currency="JPY" />

2.23.4.8. DataTextBox部品

<input type="text" dojoType="dijit.form.DateTextBox" id="dateTextBox_<portlet:namespace/>" />

2.23.4.9. Form部品

<div dojoType="dijit.form.Form" id="form_<portlet:namespace/>" action="" method=""></div>

2.23.4.10. RadioButton部品

<input type="radio" dojoType="dijit.form.RadioButton" id="radioButton_<portlet:namespace/>"/>

2.23.4.11. TextBox部品

<input type="text" class="otxpDndItem" dojoType="dijit.form.DateTextBox" id="textBox_<portlet:namespace/>"/>

2.23.4.12. TitlePane部品

<div dojoType="dijit.TitlePane" title="Title"></div>

2.23.4.13. Tooltip部品

<span id="text<portlet:namespace/>">text</span><span dojoType="dijit.Tooltip" connectId="text<portlet:namespace/>">tooltip</span>

2.23.4.14. ProgressBar部品

<div dojoType="dijit.ProgressBar" jsId="jsProgress">
</div>
<input type="button" value="Start" onclick="download<portlet:namespace/>();" />
<script type="text/javascript">
function download<portlet:namespace/>(){
  var step = 0;
  jsProgress.update({
    maximum: 1,
    progress: ++step
  });
}
</script>

2.23.4.15. Menu部品

<input type="text" class="otxpDndItem" dojoType="dijit.form.DateTextBox" id="textBox_<portlet:namespace/>"/>

2.24. プログラミング上の注意事項

ポートレットを作成する上で注意すべき事項について以下に示します。

2.24.1. HTML関連

2.24.2. スクリプト関連

2.24.3. CSS関連

2.24.4. その他