この節では、管理コンソールのJSPテンプレート、スタイル、およびユーザー入力コントロールを使用するポートレットを追加する方法について説明します。たとえば、以下のようなコンテンツを表示するポートレットを追加できます。
提供するリソースをまとめた表をContentBookに表示し、ユーザーが特定のリソースに移動したり、表からリソースのアクションを呼び出したりできるようにします。(図2-5に示したWebLogic Server表の例を参照)。
ContentBookにフォームを表示し、提供したリソースをユーザーがモニターしたり構成したりできるようにします。
図7-1にこのプロセスを示します。プロセスの手順、および各手順の結果については、表7-1を参照してください。以下の節では、各手順について詳しく説明します。
表7-1 モデルMBeanの開発タスクと結果
| 手順 | 説明 | 結果 |
|---|---|---|
|
拡張内に表示する各テキスト文字列の名前/値ペアを格納したテキスト・ファイルを作成します。 |
1つまたは複数の |
|
|
フォームと表を表示するWebLogic Server JSPタグでは、Apache Strutsがコントローラ・エージェントであることを前提とします。JSPタグは、Struts |
|
|
|
WebLogic Serverには、JSPにインポートできるJSPテンプレートが用意されています。また、管理コンソールで使用されているのと同じUIコントロールを表示するためのJSPタグ・ライブラリも用意されています。 |
管理コンソールのスタイルと構造に調和するJSP。 |
|
|
拡張の位置を定義するXMLファイルを作成します。 |
ポートレットを定義し、Struts ページ・コントロールまたはブック・コントロールを定義する |
|
|
6.拡張のアーカイブとデプロイメント |
詳細は、第9章「コンソール拡張のアーカイブとデプロイ」を参照してください。 |
拡張を格納したWARファイル。 |
|
注意: 拡張をデプロイする前に、JSPをプリコンパイルする必要があります。 |
JSPで表示するテキスト文字列は、すべてメッセージ・バンドルで定義することをお薦めします。メッセージ・バンドルの作成の詳細は、第4章「メッセージ・バンドルの作成」を参照してください。
バンドルをJSPで使用するには:
JSTL fmt.tldタグ・ライブラリをインポートします。
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
バンドルの名前を宣言します。
<fmt:setBundle basename="bundle" var="current_bundle" scope="page"/>
bundleはバンドルの名前です。
JSPに文字列を出力させる場合は、次のJSPタグを使用します。
<fmt:message key="property-name" bundle="${current_bundle}"/>
例:
<fmt:message key="myextension.myTab.introduction" bundle="${current_bundle}"/>
WebLogic Serverでは、テキスト・コントロール、チェック・ボックス、ラジオ・コントロールなどの様々なHTML入力コントロールを表示できる<wl:form> JSPタグを提供しています。フォームは、読取り専用にすることも、ユーザー入力可能にすることもできます。ユーザー入力可能なフォームには、ビジネス・レイヤーで処理するためのフォーム・データをユーザーがポストできるように、ボタンを含める必要があります。
データを表形式で表示する<wl:table> JSPタグも提供されています。表内の各行は、WebLogic Serverインスタンス、アプリケーション、ログ・メッセージなどの1つのエンティティを表します(図7-2を参照)。ハイパーテキスト・リンクを表示するように表の列を構成できます。ハイパーテキスト・リンクを利用すると、ユーザーは表内の項目に関する詳細情報を表示するページに移動できます。HTMLチェック・ボックス・コントロールを含む表の列を作成することもできます。ユーザーが表の行のチェック・ボックスを選択して送信ボタンをクリックすると、拡張ではその行全体に対応するビジネス・ロジックを呼び出します。たとえば、チェック・ボックスを使用して、ある行が表す項目を削除することができます。
これらのタグはいずれも、Apache Struts ActionおよびActionFormを使用して、ビジネス・レイヤーとプレゼンテーション・レイヤーの間でデータを渡します。
Apache Strutsは、Struts ActionForm Bean(フォームBean)に対してインスタンス化と移入を行う複数の技法をサポートします。たとえば、フォームの各プロパティのゲッター・メソッドとセッター・メソッドを含む独自の具象Java Beanをコーディングできます。また、Struts DynaActionForm Beanを使用できます。このBeanでは、Java Beanを動的に構成して、Struts構成ファイルで宣言されているプロパティを格納します。
Oracle JSPタグを使用して管理コンソールにフォームを表示する場合は、Strutsがサポートするいずれかの方法を使用して、フォームBeanを作成してデータを設定できます(「例: Strutsポートレットによるコンテンツの表示」の例では、カスタムJava BeanをコーディングするかわりにDynaActionForm Beanを使用しています)。
どの方法を選択する場合でも、Java Beanには以下のプロパティを含める必要があります。
handle。com.bea.console.handles.Handle型、またはユーザーが作成するカスタムHandleクラス。
ポータル・フレームワークはこのプロパティを使用して、ActionForm Beanと、Beanにデータを設定するためのデータ・ソース(MBeanなど)を関連付けます。「ActionFormと行Beanのハンドル」を参照してください。
Oracle JSPタグを使用して管理コンソールに表を表示する場合は、2つのフォームBeanを作成する必要があります。1つは表内の行を表すBean (行Bean)、もう1つは行Beanの集合を含むBean (表Bean)です。行Beanの各プロパティは表の列として表示されます。たとえば、図7-2では、各行Beanインスタンスにname, state, health、およびlistenPortプロパティが含まれています。
行Beanを作成するには、各プロパティを定義する具象Java Beanを作成する必要があります。Struts DynaActionForm Beanを使用して、Struts構成ファイルで宣言されているプロパティを動的に格納することはできません。
表Beanを作成する場合は、Strutsがサポートするいずれかの方法を使用して、フォームBeanを作成してデータを設定できます。どの方法を選択する場合でも、表Beanには以下のプロパティを含める必要があります。
content。java.util.Collection型でなければなりません。
これは行Beanを格納するために使用する必要のあるプロパティです。
handle。com.bea.console.handles.Handle型、またはユーザーが作成するカスタムHandleクラス。
ポータル・フレームワークでは、フォームBeanと表Beanでこのプロパティを宣言することを求めていますが、表Beanの場合、このプロパティの有用性は限られています。通常、表Beanは行Beanの単なる集合です。行Beanは基底のデータ・ソースを公開しますが、表Beanでは公開されません。どのActionクラスが表Beanにデータを設定したかを追跡する必要がない限り、表Beanのこのプロパティの値を設定する必要はありません(ただし、宣言する必要はあります)。「ActionFormと行Beanのハンドル」を参照してください。
チェック・ボックスの列を含むように表を構成する場合は(選択された表の行Beanに対してStruts Actionを呼び出すことができる)、表Beanに次のプロパティを含める必要があります。
chosenContents。プリミティブ型の配列またはcom.bea.console.handles.Handleの配列。表内のチェック・ボックスの扱い方については、「表へのボタンとチェック・ボックスの追加」を参照してください。
ActionForm Beanまたは行Beanのインスタンスをユニークに識別して、Beanと基底のデータ・ソースの相関関係を確立するには、Handleオブジェクトを作成、使用できます。Handleオブジェクトはcom.bea.console.handles.Handleインタフェースを実装するJavaオブジェクトです。
Apache Strutsコントローラ・サーブレットはHttpServletRequestオブジェクトにHandleオブジェクトを格納して、Struts Action、Beehiveページ・フロー、またはJSPで使用できるようにします。
管理コンソールは、表JSP内の行(図7-2を参照)を対応する構成JSPにリンクするときにHandleオブジェクトを使用します。たとえば、Server-0という名前のServerMBeanインタフェースの場合、管理コンソールはServer-0 MBeanのデータを行Beanに設定します。管理コンソールはServer-0のJMXオブジェクト名を新しいHandleオブジェクト(com.bea.console.handles.JMXHandle型)に渡して、行Beanのhandleプロパティの値としてHandleオブジェクトを設定します(図7-3を参照)。ユーザーが表JSP内のリンクをクリックすると、Strutsコントローラは行Beanのhandleプロパティを確認し、handle値を使用してどのサーバー・インスタンスが選択されたのかを判断して、選択されたサーバーの構成ページを表示します。
ActionForm Beanまたは行Beanの基底のデータ・ソースがMBeanである場合は、com.bea.console.handles.JMXHandleオブジェクトを使用できます。管理コンソールAPIリファレンスのJMXHandleを参照してください。
Beanの基底のデータ・ソースがMBeanでない場合は、com.bea.console.handles.Handleインタフェースを実装する独自のJavaクラスを作成できます。管理コンソールAPIリファレンスのハンドルを参照してください。
管理コンソールでは、HTMLフォームや表を表示し、それらにデータを入力するために、Java BeanからデータをロードするJSPタグを使用します。通常、これらのBeanには、Struts ActionがWebLogic Server MBeanからロードしたデータが格納されます。ユーザー入力を送信する場合、JSPタグはStruts Actionに転送します。転送されたほとんどのActionはWebLogic Server MBeanのデータを更新します。
管理コンソールのJSPタグを使用する場合は、独自のStruts ActionFormおよびActionを作成する必要があります。
以下の節では、フォームや表で使用するためにJava Bean、Struts ActionおよびActionFormを作成する方法について説明します。
Apache Strutsについては、http://struts.apache.org/にあるThe Apache Struts Web Application Frameworkを参照してください。
ビジネス・レイヤーとプレゼンテーション・レイヤーのJSPとの間でデータを渡すためのStruts情報を作成するには:
Java Bean (フォームBean)にビジネス・レイヤーのデータを設定するorg.apache.struts.action.Actionクラスを作成します。
ユーザー入力が可能なフォームの場合は、ユーザーがフォームからポストするデータを処理するために別のActionクラスを作成します。
「フォーム・データを処理するためのStruts Actionクラスの作成」を参照してください。
Struts構成ファイルで次の手順を行います。
Actionクラスがデータを設定して使用するフォームBeanの名前とプロパティを宣言します。
ユーザー入力が可能なフォームの場合は、同じフォームBeanを使用して、フォームにデータを設定したり、データを処理するActionクラスにユーザー入力を返したりできます。
StrutsコントローラがフォームBeanをインスタンス化して、フォームにデータを設定するActionクラスを呼び出す際に使用するActionマッピングを作成します。
ユーザー入力が可能なフォームの場合は、ユーザーがフォームを送信したときにStrutsコントローラが使用する別のActionマッピングを作成します。
「Struts ActionFormおよびActionマッピングの構成」を参照してください。
フォーム・データを処理するStruts Actionクラスを作成するには:
フォームBeanにデータを設定するorg.apache.struts.action.Actionクラスを作成します。(例7-1を参照)。
StrutsコントローラはActionクラスに空のActionForm Beanを渡します。Beanにデータを設定するには、次のメソッドを実装します。
Action.execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
実装では次のことを行います。
基底のソース(MBeanなど)からデータを収集します。
空のActionForm BeanをDynaActionForm Beanとしてキャストします。
<form-bean>要素で定義した各プロパティ(handleプロパティを除く)に対してDynaActionForm.set()メソッドを呼び出します。
たとえば、nameとtotalRxという2つのプロパティを定義している場合は、次のようになります。
DynaActionForm form = (DynaActionForm) actionForm;
form.set("name",namefromMBean);
form.set("totalRx",totalRxfromMBean);
フォームBeanと基底のデータ・ソースとの間に相関関係を確立するには、handleプロパティの値を設定します(「ActionFormと行Beanのハンドル」を参照してください。)
たとえば、基底のデータ・ソースがMBeanである場合は、JMXHandleを使用し、handleプロパティをMBeanのObjectNameに設定します。
ObjectName anMBean = new
ObjectName("com.bea.medrec:Type=com.bea.medrec.controller.
RecordSessionEJBMBean,Name=MedRecEAR");
form.setHandle(new JMXHandle(anMBean));
クラスに渡されたリクエスト・オブジェクトにDynaActionForm Beanを格納します。
httpServletRequest.setAttribute("form-bean-name", form);
form-bean-nameは 構成ファイルでフォームBeanに対して構成した名前に相当します(「Struts ActionFormおよびActionマッピングの構成」を参照)。
Actionクラスに渡されたActionMappingオブジェクトのActionMapping.findForward()メソッドで「success」を返します。
return actionMapping.findForward("success");
ビジネス・レイヤーで処理するためのデータをフォームがポストする場合は、フォーム・データを処理する別のActionクラスを作成します。
ユーザーが(HTMLボタンをクリックして)フォームからデータをポストすると、Strutsコントローラはデータが設定されたActionForm BeanをActionクラスに渡します。データを処理するには、次のメソッドを実装します。
Action.execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
実装では次のことを行います。
リクエストに渡されたActionForm BeanをDynaActionForm Beanとしてキャストします。
処理する各プロパティに対してDynaActionForm.get()メソッドを呼び出します。
たとえば、name、totalRx、およびhandleというプロパティを処理する場合は、次のようになります。
DynaActionForm form = (DynaActionForm) actionForm; String nameValue = (String) form.get(namefromMBean); Integer totalValue = (Integer) form.get(totalRxfromMBean); JMXHandle handle = (JMXHandle) form.get(handle);
データを処理します。
たとえば、nameおよびtotalRxプロパティがMBeanの属性を表しており、このMBean属性の値を変更する場合は、handleプロパティを使用してMBeanインスタンスのJMXオブジェクト名を取得し、次にJMX APIを使用してMBean属性にフォームからポストされた値を設定します。
ObjectName oName = handle.getObjectName();
MBeanServer.setAttribute(oName, new Attribute(("Name", nameValue));
MBeanServer.setAttribute(oName, new Attribute(("TotalRx", totalValue));
Actionクラスに渡されたActionMappingオブジェクトのActionMapping.findForward()メソッドで「success」を返します。
return actionMapping.findForward("success");
Actionクラスをコンパイルして、root-dir/WEB-INF/classesディレクトリで始まるパッケージ構造に保存します。
例7-1は、カスタムMBeanにアクセスし、そのMBeanを使用してフォームBeanにデータを設定するorg.apache.struts.action.Actionクラスの例です。
例7-1 例: フォームBeanにデータを設定するActionクラス
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.MalformedObjectNameException;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class MedRecMBeanFormAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)
throws Exception {
try {
// Establish a local connection to the Runtime MBean Server
InitialContext ctx = new InitialContext();
MBeanServer server =
(MBeanServer) ctx.lookup("java:comp/env/jmx/runtime");
// Create an ObjectName that corresponds to a custom MBean that
// has been registered in the Runtime MBean Server
ObjectName anMBean = new ObjectName(
"com.bea.medrec:Type=com.bea.medrec.controller.
RecordSessionEJBMBean,Name=MedRecEAR");
//Get the value of the custom MBean's "Name" attribute
String namefromMBean = (String)server.getAttribute
(anMBean, "Name");
// Get the value of the custom MBean's "TotalRx" attribute
Integer totalRxfromMBean = (Integer) server.getAttribute
(anMBean, "TotalRx");
// Populate the form bean
DynaActionForm form = (DynaActionForm) actionForm;
form.set("name",namefromMBean);
form.set("totalRx",totalRxfromMBean);
form.set("handle",(new JMXHandle(anMBean)));
// Set the form bean in request. The name of the
// form bean must match the "form-bean" name in your
// Struts configuration file
httpServletRequest.setAttribute("medrecMBeanEJBForm", form);
} catch (Exception ex) {
ex.printStackTrace();
}
return actionMapping.findForward("success");
}
}
ActionFormとActionマッピングを宣言するStruts構成ファイルを作成するには:
例7-2のコードをコピーして、Strutsモジュールの構成ファイルに貼り付けます。
構成ファイルをまだ作成していない場合は、root-dir/WEB-INFにテキスト・ファイルを作成します(「拡張のディレクトリ・ツリーの作成」を参照)。ファイル名はstruts-auto-config-module.xml.にします。
moduleは、Strutsモジュールに付けた名前です。名前の衝突を避けるため、会社名を使用することをお薦めします。デフォルトのStrutsモジュールはOracle ActionおよびActionForm用に予約されているため、独自のStrutsモジュールを作成する必要があります。Strutsモジュールの詳細は、Apache Strutsのユーザー・ガイド(http://struts.apache.org/)を参照してください。
ビジネス・レイヤーからプレゼンテーション・レイヤーのJSPにデータを転送するためにStrutsが使用するフォームBeanを構成するには、例7-2の以下の値を置き換えます。
form-bea-name。DynaActionForm beanのこのインスタンスに割り当てるユニークな名前です。Actionクラスは、Beanにデータを設定してStrutsコントローラに返すときに、このBean名を参照します。
Beanインスタンスにデータを設定するときに使用するStruts Actionの名前が反映された名前を使用してください。
フォームBeanにデータを設定するためにStrutsが使用するActionマッピングを構成するには、Beanをシリアライズして、HTTPリクエストに格納し、そのリクエストをJSPに転送します。例7-2の以下の値を置き換えます。
action-nameActionマッピングに割り当てるユニークな名前です。.portletファイルはこのAction名を参照します。
custom-Action-class。フォームBeanにデータを設定するために作成するJavaクラスの完全修飾名です。このクラスの作成方法は手順5で説明します。
form-jsp.jsp。フォームを表示するために作成するJSPの名前です。「フォームJSPの作成」を参照してください。
ビジネス・レイヤーで処理するためのデータをフォームからポストする場合は、別の<action>要素を作成して、フォーム・データを処理するために作成するカスタム・クラスを指定します。
この2番目の<action>要素のform-bean-nameには、フォームに最初にデータを設定した同じフォームBeanを使用できます。処理用にデータのサブセットのみをポストする場合は、同じフォームBeanを使用するかわりに、処理すべきプロパティのみを定義した別のフォームBeanを構成できます。
処理に成功すると、この追加の<action>要素は、前述の手順で構成したActionマッピングに転送できます。更新後のデータでJSPが再ロードされます。
例7-2 Struts構成ファイルのテンプレート
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"struts-config_1_1.dtd">
<struts-config>
<form-beans>
<form-bean name="form-bean-name"
type="org.apache.struts.action.DynaActionForm">
<form-property name="handle" type="com.bea.console.handles.Handle"/>
<!-- insert additional "form-property" elements here -->
</form-bean>
</form-beans>
<action-mappings>
<action path="/action-name"
type="custom-Action-class"
name="form-bean-name"
scope="request"
validate="false">
<forward name="success" contextRelative="true"
path="/ext_jsp/form-jsp.jsp"/>
</action>
<!-- insert additional "action" elements here -->
</action-mappings>
<message-resources parameter="global"/>
<message-resources parameter="validationmessages" key="VALIDATIONMESSAGES"/>
<message-resources parameter="genresources" key="GENRESOURCES"/>
<message-resources parameter="global" key="GLOBAL"/>
</struts-config>
WebLogic Server <wl:table> JSPタグを使用するJSP用のJava行Bean、Struts Action、およびActionFormを作成するには:
行Beanとして機能するBeanを構成するには、表に表示するデータ項目ごとに1つのプロパティを含む標準のJava Beanを作成します。
Java beanをコンパイルして、root-dir/WEB-INF/classesディレクトリで始まるパッケージ構造に保存します。
表Beanとして機能するBeanを構成するには:
例7-2のコードをコピーして、Strutsモジュールの構成ファイルに貼り付けます。
構成ファイルをまだ作成していない場合は、root-dir/WEB-INFにテキスト・ファイルを作成します(「拡張のディレクトリ・ツリーの作成」を参照)。ファイル名はstruts-auto-config-module.xmlにします。
moduleは、Strutsモジュールに付けた名前です。名前の衝突を避けるため、会社名を使用することをお薦めします。デフォルトのStrutsモジュールはOracle ActionおよびActionForm用に予約されているため、独自のStrutsモジュールを作成する必要があります。Strutsモジュールの詳細は、Apache Strutsのユーザー・ガイド(http://struts.apache.org/)を参照してください。
例7-2の以下の値を置き換えます。
form-bea-name。DynaActionForm beanのこのインスタンスに割り当てるユニークな名前です。Actionクラスは、Beanにデータを設定してStrutsコントローラに返すときに、このBean名を参照します。
Beanインスタンスにデータを設定するときに使用するStruts Actionの名前が反映された名前を使用してください。
以下のプロパティを追加します。
<form-property name="contents" type="java.util.Collection"/>
このプロパティには、Actionクラスがインスタンス化してデータを設定する行Beanの集合が含まれています。
行Beanと表Beanにデータを設定するためにStrutsが使用するActionマッピングを構成するには、Beanをシリアライズして、HTTPリクエストに格納し、そのリクエストをJSPに転送します。例7-2の以下の値を置き換えます。
action-nameActionマッピングに割り当てるユニークな名前です。.portletファイルはこのAction名を参照します。
custom-Action-class行Beanと表beanにデータを設定するために作成するJavaクラスの完全修飾名です。このクラスの作成方法は手順5で説明します。
form-jsp.jsp表を表示するために作成するJSPの名前です。「フォームJSPの作成」を参照してください。
行Beanと表Beanにデータを設定するorg.apache.struts.action.Actionクラスを作成します。(例7-3を参照)。
Beanにデータを設定するには、次のメソッドを実装します。
Action.execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
実装では次のことを行います。
基底のソース(MBeanのインスタンスなど)からアプリケーション・データを収集します。
行Beanのインスタンスを作成し、Beanの各プロパティに対するセッターを呼び出して、インスタンスにデータを設定します。
すべての行BeanインスタンスをArrayListに割り当てます。
空のActionForm Bean (表Bean)をDynaActionForm Beanとしてキャストします。
行BeanのArrayListを格納するように、表Beanのcontentプロパティを設定します。
DynaActionForm table = (DynaActionForm) actionForm;
table.set("contents",rowBeanArray);
クラスに渡されたリクエスト・オブジェクトに表Beanを格納します。
httpServletRequest.setAttribute("table-bean-name", table);
table-bean-nameはStruts構成ファイルで表beanに対して構成した名前です(例7-2を参照)。
Actionクラスに渡されたActionMappingオブジェクトのActionMapping.findForward()メソッドで「success」を返します。
return actionMapping.findForward("success");
Actionクラスをコンパイルして、root-dir/WEB-INF/classesディレクトリで始まるパッケージ構造に保存します。
例7-3 例: 行Beanと表Beanにデータを設定するActionクラス
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.MalformedObjectNameException;
import javax.naming.InitialContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class RetrieveCustomMBeansAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse)
throws Exception {
try {
// Establish a local connection to the Runtime MBean Server
InitialContext ctx = new InitialContext();
MBeanServer server =
(MBeanServer) ctx.lookup("java:comp/env/jmx/runtime");
// Create a name pattern for all MedRec EJB MBeans
ObjectName namepattern = new
ObjectName("com.bea.medrec:Type=com.bea.medrec.controller.
RecordSessionEJBMBean,*");
// Get all MedRec EJB MBeans for all applications
Set objects = server.queryNames(namepattern, null);
// Walk through each of these MBeans and get the object name
// and the value of its TotalRX attribute
Iterator i = objects.iterator();
while (i.hasNext()) {
ObjectName anMBean = (ObjectName) i.next();
String identifier = anMBean.toString();
Integer totalRxfromMBean =
(Integer) server.getAttribute(anMBean, "TotalRx");
// Instantiate a row bean.
MedRecMBeanTableBean row = new MedRecMBeanTableBean(anMBean);
// Set the properties of the row bean
row.setCanonicalName(anMBean.getCanonicalName());
row.setTotalRxinTableBean(totalRxfromMBean);
// Add each row bean to an ArrayList
result.add(row);
}
} catch (Exception ex) {
ex.printStackTrace();
}
// Instantiate the table bean
DynaActionForm form = (DynaActionForm) actionForm;
// Set the array of row beans as the value of the table bean's "contents"
// property
form.set("contents",result);
// Set the table bean in request. The name of the
// table bean must match the "form-bean" name in your
// Struts configuration file
httpServletRequest.setAttribute("genericTableForm", form);
return actionMapping.findForward("success");
}
}
管理コンソールJSP内のほとんどのポートレットは、tableBaseLayout_netuiおよびconfigBaseLayout_netuiテンプレートをベースにしています。
以下の節では、これらのテンプレートを使用してJSPを作成する方法について説明します。
表7-2では、管理コンソール拡張で使用できるJSPテンプレートについて説明します。すべてのテンプレートは、管理コンソールのWEB-INFディレクトリ内にある/layoutsディレクトリに格納されています。テンプレートの詳細は、JSPファイルを開き、ファイルの先頭にあるコメントを読みます。
テンプレートがニーズに合わない場合は、独自のテンプレートを作成し、JSP内に直接コンテンツを構造化できます。
表7-2 管理コンソールのJSPテンプレート
| テンプレート | 用途 |
|---|---|
assistantBaseLayout_netui.jsp |
コンソール内のすべての標準アシスタントJSP。 |
assistantFormAndTableLayout_netui.jsp |
表を含むコンソール内のすべての標準アシスタントJSP。 |
configBaseLayout_netui.jsp |
コンソール内のすべての標準構成フォームJSP。 |
configBaseLayoutNoTransact.jsp |
コンソール内のすべての非トランザクション構成フォームJSP |
configBaseLayoutWithButtons_netui.jsp |
ボタン・バーに追加のボタンがあるコンソール内のすべての標準構成フォームJSP。 |
configIntroLayout_netui.jsp |
テキストのみがある単純なページ。 |
configNoFieldsLayout_netui.jsp |
すべての情報があるページ。 |
configNoTransactAndTables_netui.jsp |
表を4つまでおよび非トランザクションの構成を含むページ。 |
filterAndTableLayout_netui.jsp |
上にフィルタがある表を含むすべてのページ。 |
formAndTableLayout_netui.jsp |
表も含む構成フォームJSP。 |
formWithButtonsLayout_netui.jsp |
ボタン・バーがあるフォーム・ページ。ただし、このフォーム・ページは、構成マネージャのロック処理に一切参加しません。 |
fourTablesLayout_netui.jsp |
4つ の表があるすべての表ページ。 |
standalone_layout.jsp |
スタンドアロン・ページつまり、コンソールPortal外部のページ |
summarypage.jsp |
すべての概要ページ |
tableBaseLayout_netui.jsp |
管理コンソールでは、単一の表を表示するすべてのJSPでこのテンプレートを使用します。 |
tableBaseMonitoringLayout.jsp |
表更新機能を含むすべての単一の表のページ |
tablePreferencesLayout.jsp |
非推奨。 |
threeTablesLayout_netui.jsp |
3つの表があるすべての表ページ |
twoTablesLayout_netui.jsp |
2つの表があるすべての表ページ |
twoTablesWithButtonsLayout.jsp |
2つの表とボタン・バーがあるページ |
フォームJSPを作成する前に、ビジネス・レイヤーとJSPの間でデータを渡すStruts情報を作成します。「フォームJSPのStruts情報の作成: 主な手順」を参照してください。
フォームJSPを作成するには(例7-4を参照):
JSPを作成して、開発用ディレクトリ内に保存します。拡張内のすべてのJSPを格納するサブディレクトリを作成することをお薦めします。たとえば、root-dir/jspを作成します。root-dirは開発用のディレクトリです。詳細は、第3章「開発環境の設定」を参照してください。
以下のタグを含めてJSPタグ・ライブラリをインポートします。
<%@ taglib uri="/WEB-INF/console-html.tld" prefix="wl-extension" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://beehive.apache.org/netui/tags-template-1.0" prefix="beehive-template" %>
これらのタグ・ライブラリについては、「JSPタグ・ライブラリ」を参照してください。
(オプション)ローカライズされたテキストを<fmt:message>タグを使用して表示する予定がある場合は、<fmt:setBundle/>を使用してメッセージ・バンドルの名前を指定します。
この<fmt:setBundle/>タグを使用すると、一度バンドル名を指定すれば、変数を使用して<fmt:message>タグからこの値を参照できます。
次の開始タグを作成して、構成ページのJSPテンプレートを宣言します。
<beehive-template:template templatePage="/layouts/configBaseLayoutNoTransact.jsp">
このタグはまだ閉じないでください。フォームJSPの他のJSPタグは、すべてのこのテンプレート・タグ内にネストします。
|
注意:
|
<beehive-template:section name="configAreaIntroduction">タグを作成します。このタグの中に、フォームの概要を説明する文章を入力します。この説明は、フォームの上に表示されます。
次の開始タグを作成します。
<beehive-template:section name="form">
このタグはまだ閉じないでください。
次のタグを作成して、それ以降のJSPタグがXHTMLを出力することを示します。
<html:xhtml/>
<wl-extension:template name="/WEB-INF/templates/form.xml">開始タグを作成します。
このテンプレートは、管理コンソールの構成ページ(たとえば「ドメイン: 構成: 一般」)と調和するフォームを作成します。
このテンプレートでは、フォームを送信するボタンも生成されます。
<wl-extension:form>開始タグを作成し、以下の属性の値を指定します。
action。(オプション)フォームがユーザー入力を受け付ける場合は、ユーザーがこのフォームを送信するときに呼び出されるStruts Actionのパスを指定します。Actionのパスを定義するStrutsモジュールは、リクエスト内で指定されます。
bundle。(オプション)列の見出しのローカライズ名を含むメッセージ・バンドルの名前を指定します。
readOnly。(オプション)このフォームを読取り専用にする(たとえば、読取り専用のモニター・データを表示する)場合は「true」を指定します。
フォームに表示するフォームBeanのプロパティのそれぞれについて、表示するコントロールの種類に対応した<wl-extension>タグを作成します(WebLogic Server JSPタグ・リファレンスを参照)。
<wl-extension:checkbox>
<wl-extension:chooser-tag>
<wl-extension:hidden>
<wl-extension:password>
<wl-extension:radio>
<wl-extension:select>
<wl-extension:text>
<wl-extension:text-area>
これらのタグのかわりに、<wl-extension:reflecting-fields>タグを使用することもできます。このタグは、フォームBean内の各プロパティについてHTML入力タグを生成します。たとえば、java.lang.Stringを保持するBeanプロパティの場合はテキスト・コントロールが生成され、ブール型のプロパティの場合はチェック・ボックスが生成されます。このタグでは、リクエストにおいてJSPに渡されるデフォルトのフォームBeanを使用します。
ユーザー入力を受け付けるフォームで、WebLogic Server MBeanの属性は変更しない場合は、前述の手順で説明した<wl-extension>タグ内にsinglechange="false"属性を指定してください。
この属性を使用すると、ユーザーはWebLogic Serverの編集セッションを開始せずにフォーム・データをポストできます。
ユーザーに対して各コントロールの目的を説明するテキストを表示するには、前の手順で作成した各<wl-extension>タグにinlineHelpId属性を含めます。
<wl-extension:form>タグ、<beehive-template:section>タグ、および<beehive-template:template>タグを閉じます。
例7-4 例: 単純なフォームJSP
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/console-html.tld" prefix="wl-extension" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://beehive.apache.org/netui/tags-template-1.0" prefix="beehive-template" %>
<fmt:setBundle basename="mycompany" var="current_bundle" scope="page"/>
<beehive-template:template templatePage="/layouts/configBaseLayoutNoTransact.jsp">
<beehive-template:section name="configAreaIntroduction">
<fmt:message key="mycompany.myresource.introduction"
bundle="${current_bundle}"/>
</beehive-template:section>
<beehive-template:section name="form">
<html:xhtml/>
<wl-extension:template name="/WEB-INF/templates/form.xml">
<wl-extension:form action="/MyCompanyMyResourceUpdated" bundle="core">
<wl-extension:text property="MyResourceName"
labelId="mycompany.myresource.name.label"
inlineHelpId="mycompany.myresource.name.label.inlinehelp"
singlechange="false"/>
<wl-extension:select
property="MyResourceWidgets"
labelId="mycompany.myresource.widgets.label"
inlineHelpId="mycompany.myresource.widgets.label.inlinehelp"
singlechange="false">
<wl-extension:optionsCollection
property="MyResourceAvailableWidgets"
label="label" value="value"/>
</wl-extension:select>
</wl-extension:form>
</wl-extension:template>
</beehive-template:section>
</beehive-template:template>
表JSPを作成する前に、ビジネス・レイヤーとJSPの間でデータを渡すStruts情報を作成します。「表JSPのStruts情報の作成」を参照してください。
リソースをモニターするための表JSPを作成するには(例7-5を参照):
JSPを作成して、開発用ディレクトリ内に保存します。拡張内のすべてのJSPを格納するサブディレクトリを作成することをお薦めします。たとえば、root-dir/ext_jspを作成します。root-dirは開発用のディレクトリです。
|
注意:
|
詳細は、第3章「開発環境の設定」を参照してください。
以下のタグを含めてJSPタグ・ライブラリをインポートします。
<%@ taglib uri="/WEB-INF/console-html.tld" prefix="wl-extension" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://beehive.apache.org/netui/tags-template-1.0" prefix="beehive-template" %>
これらのタグ・ライブラリについては、「JSPタグ・ライブラリ」を参照してください。
(オプション)ローカライズされたテキストを<fmt:message>タグを使用して表示する予定がある場合は、<fmt:setBundle/>を使用してメッセージ・バンドルの名前を指定します。
この<fmt:setBundle/>タグを使用すると、一度バンドル名を指定すれば、変数を使用して<fmt:message>タグからこの値を参照できます。
次の開始タグを作成して、表のJSPテンプレートを宣言します。
<beehive-template:template templatePage="/layouts/tableBaseLayout_netui.jsp">
このタグはまだ閉じないでください。表JSPの他のJSPタグは、すべてのこのテンプレート・タグ内にネストします。
<beehive-template:section name="configAreaIntroduction">タグを作成します。このタグの中に、表の概要を説明する文章を入力します。この説明は、表の上に表示されます。
次の開始タグを作成します。
<beehive-template:section name="table">
このタグはまだ閉じないでください。
<wl-extensions:table>開始タグを作成し、少なくとも以下の属性の値を指定します。
name。この表用に構成したフォームBeanの名前を指定します。
property。行Beanを格納するフォームBeanプロパティの名前を指定します。
bundle。(オプション)列の見出しのローカライズ名を含むメッセージ・バンドルの名前を指定します。
captionEnabled。(オプション)表の上にタイトルを表示する場合は「true」を指定します。
captionEnabled属性に「true」を指定した場合は、<wl-extension:caption>タグを作成します。このタグの中に、表のタイトルを入力します。
表に表示する行Beanのプロパティのそれぞれについて<wl-extension:column>タグを作成し、以下の属性の値を指定します。
property。行Beanプロパティの名前を指定します。
label。列の見出しを表示するメッセージ・バンドルのキーを指定します。
<wl-extension:table>タグ、<beehive-template:section>タグ、および<beehive-template:template>タグを閉じます。
例7-5 例: モニター用の表JSP
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/console-html.tld" prefix="wl-extension" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://beehive.apache.org/netui/tags-template-1.0" prefix="beehive-template" %>
<fmt:setBundle basename="core" var="current_bundle" scope="page"/>
<beehive-template:template templatePage="/layouts/tableBaseLayout_netui.jsp">
<beehive-template:section name="configAreaIntroduction">
<fmt:message key="core.server.servertable.introduction"
bundle="${current_bundle}"/>
</beehive-template:section>
<beehive-template:section name="table">
<wl-extension:table name="extensionForm"
property="contents"
captionEnabled="true"
bundle="core">
<wl-extension:caption>
<fmt:message key="server.table.caption"
bundle="${current_bundle}"/>
</wl-extension:caption>
<wl-extension:column property="name"
label="server.table.label.name"/>
<wl-extension:column property="clusterName"
label="server.table.label.cluster"/>
<wl-extension:column property="machineName"
label="server.table.label.machine"/>
</wl-extension:table>
</beehive-template:section>
</beehive-template:template>
表JSPでは、各行から構成ページまたは他の関連ページへのリンクを提供できます。リンクのメカニズムではHandleオブジェクトを使用して、特定の表の行に関連しているページを判断します(「ActionFormと行Beanのハンドル」を参照してください)。
以下のいずれかのJSPタグを使用して、表からリンクさせることができます。
<wl:column-link>。リンク先のページとポートレット・インスタンスのラベルを指定する必要があります。ハンドルによって、ポートレットは選択された特定の行に関連するデータを表示します。
<wl:column-dispatch>。メタデータを使用して、表示するページとポートレットを決定します。ページとポートレットのラベルを指定するかわりに、ページ宣言にメタデータ・タグを追加し、メタデータ値を<wl:column-dispatch>タグに指定します。メタデータを使用すると、リンクを損わずにページ・ラベルを変更することができます。ハンドルも使用され、ページ内のポートレットは選択された特定の行に関連するデータを表示します。
この章では、ナビゲーション用の表の列の作成方法について説明します。
handleプロパティを作成してデータを設定するには:
行Beanに、データ型がcom.bea.console.handles.Handleでhandleという名前のプロパティを追加します。
public com.bea.console.handles.Handle getHandle() {
return handle;
}
public void setHandle(Handle handle) {
this.handle = handle;
}
行Beanにデータを設定するStruts Actionクラス内で、handleプロパティの値を設定します。
行BeanにMBeanのデータを設定する場合は、そのMBeanのJMX ObjectNameを格納するcom.bea.console.handles.JMXHandleオブジェクトを作成します。次に、JMXHandleオブジェクトをhandleプロパティの値として設定します。
javax.management.ObjectName anMBean = new
ObjectName("com.bea.medrec:Type=com.bea.medrec.controller.
RecordSessionEJBMBean,Name=MedRecEAR");
row.setHandle(new JMXHandle(anMBean));
その他の種類のデータ・ソースのデータを行Beanに設定する場合は、ObjectNameではなくコンストラクタにStringを渡すことで、JMXHandleオブジェクトを作成できます。StringにはType=identifierという文字シーケンスを含める必要があります。identifierは分かりやすいものにします。
row.setHandle(new JMXHandle("Type=myDataSource"));
Handleオブジェクトを作成して設定することもできます。管理コンソールAPIリファレンスのハンドルを参照してください。
行BeanとActionクラスを再コンパイルします。
<wl:column-link>タグを使用するには:
表JSPの最上部に以下の文を追加して、renderタグ・ライブラリを表JSPにインポートします。
<%@ taglib uri="render.tld" prefix="render" %>
Oracleはこのタグ・ライブラリを実行時環境で提供しています。
<wl:table>タグ内に次の属性を追加します。
checkBoxValue="handle"
リンク元となる列を表示する<wl:column>タグの中に、<wl:column-link> JSPタグをネストします。
<wl:column-link portlet="portlet-instanceLabel"> <render:pageUrl pageLabel="page-definitionLabel"/> </wl:column-link>
説明:
portlet-instanceLabel。リンク先のポートレット・インスタンスのラベルです。
ラベルは<netuix:portletInstance>要素のinstanceLabel属性で定義されています。この要素はポートレットが含まれるページの.bookファイルにあります。
page-definitionLabel。リンク先のポートレット・インスタンスが含まれているページのユニークなラベルです。
ラベルは<netuix:page>要素のdefinitionLabel属性で定義されています。この要素はページの.bookファイルにあります。
例:
<wl:column property="Name"
label="medrecMBean.name.label">
<wl:column-link portlet="medrecMonitorTabPortlet">
<render:pageUrl pageLabel="medrecMonitor"/>
</wl:column-link>
</wl:column>
|
注意:
|
<wl:column-dispatch>タグを使用するには:
リンク先のページを定義する.bookファイルで、そのページの<netuix:page>要素を見つけて、以下の要素をネストします。
<netuix:meta name="perspective-name" content="ObjectType-value"/>
説明:
perspective-name。分かりやすい名前を指定します。この値は、<wl:column-dispatch>タグのperspective属性で指定する値と一致する必要があります。たとえば、myCompany-configuration-pageと指定します。
ObjectType-value 。行Beanの HandleオブジェクトのObjectTypeプロパティの値。管理コンソールAPIリファレンスのHandle.getObjectType()を参照してください。
たとえば、行BeanにMBeanのデータを設定するとします。MBeanのObjectNameを使用してJMXHandleオブジェクトを作成し、そのオブジェクトを行Beanのhandleプロパティの値として設定します。MBeanのObjectNameが「com.mycompany:Name=myApp1,Type=myAppMBean」である場合、JMXHandle.ObjectTypeの値はmyAppMBeanになります。
例:
<netuix:meta name="myCompany-configuration-page" content="myAppMBean"/>
表JSPの<wl:table>タグ内に次の属性を追加します。
checkBoxValue="handle"
リンク元となる列を表示する<wl:column>タグの中に、<wl:column-dispatch> JSPタグをネストします。
<wl:column-dispatch perspective="perspective-name"/>
説明:
perspective-name。.bookファイルで指定したperspective-name値に一致します。
例:
<wl:column property="Name" label="medrecMBean.name.label"> <wl:column-dispatch perspective="myCompany-configuration-page"/> </wl:column-link> </wl:column>
<wl:table>タグを使用して作成する表には、単独で、またはチェック・ボックスやラジオ・ボタンの列と組み合せて、ボタンを使用できます。
単独で使用する場合、ボタンはページUIコントロールへの転送を行えます。たとえば、WebLogic Serverの「サーバー」表では(図7-2を参照)、ユーザーが「新規作成」ボタンをクリックすると、「新しいサーバーの作成」アシスタントが開きます。
チェック・ボックスと組み合せて使用する場合、ボタンは1つまたは複数の表の行のためにデータを処理できます。たとえば、表内の各行が、アプリケーションのモニター・データを提供するカスタムMBeanのインスタンスを表す場合、1つまたは複数の行のチェック・ボックスを選択してボタンをクリックすると、対応するMBeanインスタンスの値がリセットされるようにすることができます。
以下の節では、チェック・ボックスとボタンを表に追加する方法について説明します。
表にボタンを追加するには:
表JSPで、<wl-extension:table>タグに以下の属性を追加します。
singlechange="false" controlsenabled="true"
controlsenabled属性を使用すると、表にボタンを表示できるようになります。singlechange属性は、ユーザーがドメインの構成をロックせずにボタンをクリックできるようにします(WebLogic Server JSPタグ・リファレンスを参照。)
<wl-extension:table>開始タグの直後に、以下のタグを追加します。
<wl:button-bar> <wl:button-bar-button labelid="button-label" pageLabel="page-definitionLabel"/> </wl:button-bar>
説明:
button-label。ボタン上に表示するテキスト、または、JSPの<fmt:setBundle>要素で宣言されたバンドルで定義されているプロパティの名前です。
page-definitionLabel。転送先のポートレット・インスタンスが含まれているページのユニークなラベルです。
ラベルは<netuix:page>要素のdefinitionLabel属性で定義されています。この要素はページの.bookファイルにあります。
たとえば、サーバー表ページにリンクするには、次のように指定します。
<wl:button-bar>
<wl:button-bar-button
labelid="Servers"
pageLabel="ServerTableBook" />
</wl:button-bar>
1つまたは複数の表の行のデータを処理するには、チェック・ボックスと、HTTPリクエストにデータをポストするためのボタンを使用します。ポストされたデータを取得して処理できるStruts Actionまたはページ・フローを作成する必要もあります。
1つまたは複数の表の行のデータをHTTPリクエストにポストするには:
Struts構成ファイルで、表のActionForm Beanの定義にchosenContentsというプロパティを追加します。
このプロパティのデータ型はプリミティブ型の配列かcom.bea.console.handles.Handleの配列にする必要があります。
<wls:table>タグでは、ユーザーが表を送信するときに、選択された各チェック・ボックスごとに1つの要素をこの配列に追加します。
例:
<form-property name="chosenContents" type="[Lcom.bea.console.handles.Handle;"/>
表JSPで、<wl-extension:table>タグに以下の属性を追加します。
singlechange="false"
controlsenabled="true"
showcheckboxes="true"
checkBoxValue="property-name"
property-nameは行Beanのプロパティの名前です。このプロパティのデータ型は、chosenContentsプロパティに対して宣言したデータ型と一致する必要があります。
<wl:table>タグでは、この行Beanの値を、表BeanのchosenContentsプロパティの配列に追加します。
ラジオ・ボタン(ユーザーは1つの行のみを選択できる)を表示する場合は、次の属性を追加します。
singlechoice="true"
<wl-extension:table>開始タグの直後に、以下のタグを追加します。
<wl:button-bar> <wl:button-bar-button labelid="button-label" portlet="portlet-instanceLabel" pageLabel="page-definitionLabel"/> </wl:button-bar>
説明:
button-label。ボタン上に表示するテキスト、または、JSPの<fmt:setBundle>要素で宣言されたバンドルで定義されているプロパティの名前です。
portlet-instanceLabel。ユーザーがボタンをクリックしたときに起動するStruts ActionまたはBeehiveページ・フローを含むポートレット・インスタンスのラベルです。ラベルは<netuix:portletInstance>要素のinstanceLabel属性で定義されています。この要素はポートレットが含まれるページの.bookファイルにあります。
Actionまたはページ・フローをすぐに起動するかわりに、JSPを含むポートレットを指定することができます。JSPでは、Actionまたはページ・フローを起動する前に、ユーザーに確認を求めることができます。
page-definitionLabel。転送先のポートレット・インスタンスが含まれているページのユニークなラベルです。
ラベルは<netuix:page>要素のdefinitionLabel属性で定義されています。この要素はページの.bookファイルにあります。
ポストされたデータを処理できるStruts Actionを作成するには:
Struts Actionに転送するポートレットを作成します。ポートレットのinstanceLabelが手順1cで指定した値と一致するようにしてください。
例:
<netuix:portletInstance markupType="Portlet"
instanceLabel="medrecMonitor.Tab.Portlet"
contentUri="/portlets/medrec_monitor_tab.portlet"/>
ポートレットの作成の詳細は、「ポートレットの定義」を参照してください。
Struts構成ファイルで、chosenContentsというプロパティを含むActionForm Beanを定義します。このプロパティのデータ型は、手順1aで指定したデータ型と同じにする必要があります。
例:
<form-bean name="processButtonForm"
type="org.apache.struts.action.DynaActionForm">
<form-property name="chosenContents"
type="[Lcom.bea.console.handles.Handle;"/>
</form-bean>
Struts構成ファイルで、ActionForm Beanのデータを、処理を行うJavaクラスに送信するStruts Actionマッピングを定義します。
例:
<action path="/ProcessButtonAction"
type="com.bea.medrec.extension.MedrecMBeanButtonAction"
name="processButtonForm"
scope="request"
validate="false">
<forward name="success" contextRelative="true"
path="/ext_jsp/button_view.jsp"/>
</action>
以下の手順では、表の行と基底のMBeanデータ・ソースを関連付けて、そのMBeanの属性の値をクリアする表について説明します。
表JSPで、チェック・ボックスを表示する<wl-extension:table>タグを構成します。ある行のチェック・ボックスをユーザーが選択すると、その行Beanのhandleプロパティの値がリクエスト・オブジェクトにポストされることを指定します。
<wl-extension:table
showcheckboxes="true"
checkBoxValue="handle"
...
>
行BeanのhandleプロパティはJMXHandleオブジェクトを格納します。このオブジェクトには、その行にデータが入力されたMBeanインスタンスのObjectNameが含まれています。
ユーザーが行を選択してボタンをクリックすると、ボタンはその行BeanのJMXHandleオブジェクトを、表BeanのchosenContentsプロパティ内の配列に追加します。次に、表Beanをポストします(図7-4を参照。)
Strutsコントローラは表Bean (Struts ActionForm Bean)をシリアライズして、シリアライズしたBeanをHTTPリクエスト・オブジェクトに書き込みます。次に、そのリクエストを指定されたポートレットに転送します。
ポートレットはStruts Actionマッピングを起動します。Actionマッピングは次のことを行います。
ActionForm Beanを作成して、HTTPリクエストのデータをそのBeanに設定します。
Actionクラスを呼び出して、ActionForm Beanをそのクラスで使用できるようにします。
ActionクラスはフォームBeanのchosenContents配列(JMXHandleのインスタンスが格納されている)を反復処理します。配列内の要素ごとにクラスは、次のことを行います。
JMXHandleオブジェクトに暗号化されたMBean ObjectNameを取得します。
MBeanをルックアップする際に.MBeanServerを使用します。
MBeanServerを使用して、属性値をクリアするMBean操作を呼び出します。
処理に成功すると、ActionマッピングはJSPに転送します。
<wl:table>タグに属性を1つ追加すると、表に表示される表の列をユーザーが構成できるようになります。管理コンソールでは、各ユーザーのプリファレンスや、表を表示するポートレットの各インスタンスのプリファレンスを永続化します。複数のポートレット・インスタンスで1つの表を再利用する場合、各ユーザーは各ポートレット・インスタンスの表ごとに異なるプリファレンスを設定できます。
表に表示される表の列のセットをユーザーが構成できるようにするには、<wl:table>タグにcustomize="true"という属性を追加します。
例:
<wl-extension:table
customize="true"
...
>
管理コンソールがこの表を含むJSPを表示する場合、表タイトルの上に「この表のカスタマイズ」リンクが表示されます。このリンクがある場合、表JSPは選択コントロールと「適用」または「リセット」ボタンを含むセクションを表示します。
ポートレットをデスクトップに直接追加することもできますが、ポートレットをContentBook内のタブやサブタブとして表示する場合は、それを格納するブックまたはページを定義する必要があります。また、netuix-extension.xmlファイルを作成する必要もあります。このファイルは、ポートレット、ブック、およびページの位置を指定し、拡張のデプロイメント記述子として機能します。
第6章「ポートレットとナビゲーション・コントロールの追加」を参照してください。