この節では、管理コンソールの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-name
Action
マッピングに割り当てるユニークな名前です。.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-name
Action
マッピングに割り当てるユニークな名前です。.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タグは、すべてのこのテンプレート・タグ内にネストします。
注意: フォームでWebLogic Server MBeanの属性を変更する場合は、かわりにconfigBaseLayout_netui.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
は開発用のディレクトリです。
注意: root-dir/jspは 予約されているディレクトリです。拡張のルート・ディレクトリにjspというディレクトリを含めることはできません。 |
詳細は、第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>
注意: <render:pageUrl/> タグは、ポータル・フレームワークURLを生成するためのコンビニエンス・タグです。 |
<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章「ポートレットとナビゲーション・コントロールの追加」を参照してください。