Skip navigation.

ポートレット間通信の確立

  前 次 前と次、目次/インデックス/pdf を分けるコロン 目次  

カスタム イベントおよびページ フロー イベントを使用した IPC の確立

IPC の確立 : 単純な例」では、ポータル フレームワーク イベントを使用してポートレット間通信を確立する非常に基本的な例を示しました。通常、アプリケーションでは、もっと複雑な IPC を確立します。たとえば、「カスタム」イベントと呼ばれる、WebLogic Portal に事前に定義されていないイベントや、「ページ フロー」イベントと呼ばれる、ページ フロー アクションから生じるイベントを使用することもできます。WebLogic Portal 8.1 Service Pack 4 以降では、イベント ハンドラを使用してこの 2 つのタイプのポートレット間通信を確立できます。

 


カスタム イベントについて

カスタム イベントは、開発者がアプリケーションに定義するイベントです。つまり、すぐに利用できる状態で WebLogic Portal 8.1 で提供されているイベントではありません。カスタム イベントを使用して、開発者が定義したペイロードを渡したり、その他の定義済みのアクションを実行したりできます。カスタム イベントは、宣言によって実行するか、バッキング ファイル内のメソッドの呼び出しに基づいて実行できます。ユーザは、バッキング ファイルのメソッドでイベントを処理するように指定できます。

 


ページ フロー イベントとは

ページ フロー イベントは、ページ フローのライフサイクル中に発生し、別のポートレットでアクションを開始できるイベントです。たとえば、ページ フローを使用するログイン ポートレットを介してユーザが認証情報を送信すると、ログイン フォームの送信を合図として、リスン中の他のポートレットがさまざまなデータベースにクエリを実行し、その認証済みユーザとそのポートレットに固有の情報が返されます。

 


カスタム イベント ハンドラとページ フロー イベント ハンドラを使用したポートレット間通信の確立 : 例

次の実習では、カスタム イベントとページ フロー イベントを使用するポータル デスクトップを作成して、ポートレット間通信を確立します。実習が完了すると、ポータル内に次の 3 つのポートレットが作成されます。

完成したポータルを実行すると、図 4-1 のような画面が最初に表示されます。

図 4-1 ポータルの初期の表示


 


 

顧客ルックアップ ポートレットから顧客名を送信すると、ポータルの表示は図 4-2 のようになります。

図 4-2 顧客名が送信されたポータル


 


 

この例を作成するには、次の手順を実行する必要があります。

この例の IPC を確立する方法

この実習では、3 つのポートレットのすべてがバッキング ファイルを使用してアクションを開始して、ポートレット間の通信を確立および実行します。ポートレットにバッキング ファイルを追加すると、イベント ハンドラ ツールで [BackingFile メソッドの呼び出し] アクションを選択できるようになります。[BackingFile メソッドの呼び出し] アクションを選択したら、[メソッド] ドロップダウン リストで、バッキング ファイルの適切なメソッドを選択します。リスン中のカスタム イベントがポートレットで検出されると、追加されたバッキング ファイルが呼び出され、指定されたメソッドが実行されます。バッキング ファイルには複数のメソッドを定義でき、イベント ハンドラからこれらのすべてのメソッドを使用できます。

バッキング ファイルとは、com.bea.netuix.servlets.controls.content.backing.JspBacking インタフェースの実装または com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking インタフェース抽象クラスの拡張を行う、Java クラスです。このファイルを使用すると、ポートレットにプログラミングによる機能を追加でき、ポータル コントロールを表示する前の事前処理 (認証など) が可能になる。この演習を始める前に、「バッキング ファイルについて」を参照することをお勧めします。


 

始める前に

開発環境を設定していない場合は、「サンプルの設定」を参照して、次の手順に従ってください。

上記の手順を実行すると、ipcDomain というポータル ドメインと、ipcTest というポータル アプリケーションが作成されます。

ダイアログ ボックスのテキスト入力に関する注意

この実習で入力する多くのテキストは、IPC を確立するためのさまざまな JPF、JSP、およびバッキング ファイル内の大文字と小文字が区別される名前を参照するため、すべてのテキストを手順で表示されたとおりに正確に入力してください。

手順 1 : ファイル構造の作成

次に、ファイル ツリーにいくつかの追加のフォルダを作成する必要があります。これらのディレクトリには、IPC を正しく確立するために必要なポートレットとそのコンポーネント (JSP やページ フロー ファイルなど) が保存されます。

注意 : ポータルごとに別々のフォルダを作成するかどうかは任意ですが、個別のフォルダを作成すると、アプリケーションを効率的に整理し、アプリケーション ルートでの混乱が軽減されるという効果があるので、ベスト プラクティスとして推奨されています。

アプリケーションに必要なフォルダを作成するには、次の手順に従います。

  1. プロジェクト名 (ipcTest) を右クリックし、[新規作成フォルダ] を選択します (図 4-3)。
  2. 図 4-3 新しいフォルダの作成


     

    [新しいフォルダの作成] ダイアログ ボックス (図 4-4) が表示されます。

    図 4-4 [新しいフォルダの作成] ダイアログ ボックス


     
  3. [新しいフォルダ名を入力してください] に、Customer_Lookup と入力し、[OK] をクリックします。
  4. ファイル ツリーのプロジェクト ルートに、Customer_Lookup フォルダが表示されます (図 4-5)。

    図 4-5 Customer_Lookup フォルダが追加されたファイル ツリー


     
  5. 1 と 2 の手順を繰り返して、フォルダをさらに 2 つ作成します。各フォルダに次の名前を付けます。
  6. フォルダの作成が完了すると、プロジェクト ルートは図 4-6 の例のようになります。

    図 4-6 新しいフォルダが追加されたファイル ツリー


     
  7. 次に、backing フォルダを作成します。このフォルダに、これから作成するバッキング ファイルを保存します。バッキング フォルダを作成するには、ipcTest/WEB-INF/src フォルダを開いて、1 と 2 の手順を繰り返します (図 4-7)。
  8. 図 4-7 ipcTest/WEB-INF/src フォルダを開く


     
  9. [新しいフォルダの作成] ダイアログ ボックスで、backing と入力し、[OK] をクリックします。
  10. ファイル ツリーの WEB-INF/src の下に、backing フォルダが表示されます (図 4-8)。

    図 4-8 backing フォルダが追加されたファイル ツリー


     

まとめ

手順 2 の完了によって、アプリケーションに必要なすべての新しいフォルダが追加されました。後の手順でページ フローを作成すると、ページ フローが保存されたフォルダの下に、各ページ フローの追加のフォルダが作成されます。

手順 2 : バッキング ファイルの作成

バッキング ファイルは、JspBacking インタフェースを実装する簡単な Java クラスです。バッキング ファイルは、JSP と連動して動作します。JSP を使用してプレゼンテーション ロジックをコード化し、バッキング ファイルを使用して簡単なビジネス ロジックをコード化します。JSP が実行される前に、常にバッキング ファイルが実行されます。バッキング ファイルのライフサイクルでは、すべてのオブジェクトに対して 4 つのメソッドが順番に実行されます。BackingContext から基になるオブジェクトを生じることができます。バッキング ファイルから BackingContext を使用し、JSP から PresentationContext を使用します。前に説明したように、バッキング ファイルは WEB-INF/src/backing に格納する必要があります。

この手順では、アプリケーションの各ポートレット用に 1 つずつ、合わせて 3 つのバッキング ファイルを作成します。ファイルを作成する時間を節約するために、このドキュメントには必要なコードがあらかじめ準備されています。オンラインで参照中の場合は、コードを切り取って適切な空のファイルに貼り付けることができます。このドキュメントの印刷版または PDF バージョンを使用しているためオンライン (HTML) コピーを取得できない場合は、コード サンプルに表示されているとおりに正確にコードを入力してください。

この実習のバッキング ファイルを作成するには、次の手順に従います。

  1. 最初に、FindCustomerBacking.java を作成します。
    1. WEB-INF/src/backing を右クリックし、[新規作成|Java Class] を選択します。
    2. 図 4-9 バッキング ファイルの作成


       

    [新しいファイル] ダイアログ ボックス (図 4-10) が表示されます。

    注意 : 左側のペインで [Common] が選択され、右側のペインで [Java Class] が選択されている必要があります。選択されていない場合は、ここで選択します。

    図 4-10 [Common] と [Java Class] が選択された [新しいファイル] ダイアログ ボックス


     
    1. [ファイル名] に FindCustomerBacking と入力し、[作成] をクリックします。

    WEB-INF/src/backing の下に、FindCustomerBacking.java が表示されます (図 4-11)。

    図 4-11 WEB-INF/src/backing の下の FindCustomerBacking.java


     

    WebLogic Workshop にファイル エディタが表示されます (図 4-12)。

    図 4-12 ファイル エディタのバッキング ファイル テンプレート


     
    1. ファイル エディタの内容をすべて削除し、コード リスト 4-1 のコード全体と置き換えます。

コード リスト 4-1 FindCustomerBacking.java サンプル コード

package backing;

import com.bea.netuix.servlets.controls.content.backing.JspBacking;
import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
import com.bea.netuix.events.Event;
import com.bea.netuix.events.GenericEvent;
import com.bea.netuix.events.PageFlowEvent;
import com.bea.netuix.servlets.controls.portlet.backing.PortletBackingContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FindCustomerBacking extends AbstractJspBacking
{
public void foundCustomer(HttpServletRequest request, HttpServletResponse
response, Event event)
{
// フォームの送信から結果を取得し、リモート IPC の中に挿入します

PortletBackingContext context =
PortletBackingContext.getPortletBackingContext(request);
String message = request.getParameter(context.getInstanceLabel() +
         "{actionForm.name}");
context.fireCustomEvent("myCustomEvent", message);
}
}
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。
  1. 次に、ListenCustomerName.java を作成します。
    1. 上記の手順 1 の a ~ c の手順を繰り返します。ただし、[ファイル名] (手順 b) には ListenCustomerName と入力します。
    2. [作成] をクリックします。
    3. ファイルが作成され (ファイル ツリーの WEB-INF/src/backing の下に表示)、ファイル エディタにバッキング ファイル テンプレートが表示されます。

    4. ファイル エディタの既存コードをすべて削除し、コード リスト 4-2 のコード全体と置き換えます。

コード リスト 4-2 ListenCustomerName.java コード サンプル

package backing;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bea.netuix.events.Event;
import com.bea.netuix.events.CustomEvent;
import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
public class ListenCustomerName extends AbstractJspBacking 
{
public void listenCustomerName( HttpServletRequest request,
HttpServletResponse response, Event event)
{

CustomEvent customEvent = (CustomEvent) event;
        String message = (String) customEvent.getPayload();
        HttpSession mySession = request.getSession();
        mySession.setAttribute("customerName", message);
    }
} 
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。
  1. 最後に、ReceiveCustomerInfo.java を作成します。
    1. 上記の手順 1 の a ~ c の手順を繰り返します。ただし、[ファイル名] (手順 b) には ReceiveCustomerInfo と入力します。
    2. [作成] をクリックします。
    3. ファイルが作成され、ファイル エディタにバッキング ファイル テンプレートが表示されます。

    4. ファイル エディタの既存コードをすべて削除し、コード リスト 4-3 のコード全体と置き換えます。

コード リスト 4-3 ReceiveCustomerInfo.java コード サンプル

package backing; 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.bea.netuix.events.Event;
import com.bea.netuix.events.CustomEvent;
import com.bea.netuix.servlets.controls.content.backing.AbstractJspBacking;
public class ReceiveCustomerInfo  extends AbstractJspBacking
{
public void listenCustomerName( HttpServletRequest request,
HttpServletResponse response, Event event)
{
        CustomEvent customEvent = (CustomEvent) event;
        String message = (String) customEvent.getPayload();
        HttpSession mySession = request.getSession();
        mySession.setAttribute("customerName", message);
    }
} 
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

まとめ

手順 3 の完了によって、必要なバッキング ファイルが作成され、WEB-INF/src/backing フォルダに保存されました。フォルダは、図 4-13 の例のようになっているはずです。

図 4-13 バッキング ファイルがすべて作成済みの WEB-INF/src/backing


 

手順 3 : 顧客ルックアップ結果ポートレットの作成

この手順では、3 つのポートレットのうち最初の 1 つを作成します。このポートレットは、顧客ルックアップ ポートレットをリスンし、特定のイベント (この場合は、送信された顧客名) を受信すると、イベントに応じてアクションを開始します (この場合は、要求された顧客の情報を返します)。

このポートレットを作成するには、ファイルを 4 つ作成します。ページ フロー ファイルを 1 つ、JSP ファイルを 2 つ、および .portlet ファイルです。.portlet ファイルは、他の 3 つのファイルのコンテナにすぎません。ただし、このファイルには重要なプロパティ、具体的には、バッキング ファイルとイベント ハンドラが設定されます。

注意 : 時間の節約およびファイル作成時の入力ミスの可能性をなくすため、このドキュメントでは必要なコードがあらかじめ準備されています。オンライン (HTML) で参照中の場合は、コードを切り取って適切な空のファイルに貼り付けることができます。このドキュメントの印刷版または PDF バージョンを使用しているためオンライン コピーを取得できない場合は、コード サンプルに表示されているとおりに正確にコードを入力してください。

ページ フロー (FindCustomerController.jpf) の作成

FindCustomer ページ フロー (FindCustomerController.jpf) は、顧客ルックアップ結果ポートレットで表示されるページの順序を設定します。このページ フローは、顧客ルックアップ ポートレットで名前が送信された後に実行されます。

FindCustomer ページ フローを作成するには、次の手順に従います (この手順では、WebLogic Workshop が実行中であることを前提とします)。

  1. ファイル ツリーの Customer_Lookup を右クリックし、[新規作成|ページ フロー] を選択します (図 4-14)。
  2. 図 4-14 [新規作成|ページ フロー] の選択


     

    ページ フロー ウィザード (図 4-15) が表示されます。

    図 4-15 ページ フロー ウィザード


     
  3. [ページ フロー名] に、findCustomer と入力します。[コントローラ名] フィールドの文字列 Newpageflow1 が、ページ フロー名と同じ文字列に置換され、「FindCustomerController」と表示されます ([コントローラ名] では、[ページ フロー名] の小文字の「f」が大文字の「F」に変換されています)。
  4. [次へ] をクリックします。
  5. [ページ フロー タイプを選択] ダイアログ ボックスが表示されます (図 4-16)。

    図 4-16 [ページ フロー タイプを選択] ダイアログ ボックス


     
  6. [基本のページ フロー] が選択されていることを確認し、[作成] をクリックします。
  7. ページ フロー デザイナに、ページ フローの基本設計が表示されます (図 4-17)。

    図 4-17 ページ フロー デザイナの FindCustomerController.jpf - フロー ビュー


     

    また、ファイル ツリーに、FindCustomerController.jpf (図 4-18) が表示されます。このページ フローを作成すると、Customer_Lookup フォルダに、ページ フロー名 (findCustomer) を持つ新しいフォルダが表示され (図 4-18)、追加の JSP、index.jsp が作成されます。findCustomer フォルダはこのポートレットを構成するファイルをホストし、index.jspresult.jsp ファイルのテンプレートとしての役割を果たします。

    図 4-18 findCustomer フォルダの FindCustomerController.jpf


     
  8. ページ フロー デザイナの下部で [ソース ビュー] を選択します。
  9. ページ フロー デザイナのビューが、図 4-19 のように変更されます。

    図 4-19 ソース ビューのデフォルトのページ フロー コード


     
  10. デザイナの全内容を強調表示して削除し、ソース ビューを空にします。
  11. コード リスト 4-4 のコード サンプルをコピーし、ページ フロー デザイナの空のソース ビューに貼り付けます。

コード リスト 4-4 FindCustomerController.jpf コード サンプル

package Customer_Lookup.findCustomer;
import com.bea.wlw.netui.pageflow.FormData;
import com.bea.wlw.netui.pageflow.Forward;
import com.bea.wlw.netui.pageflow.PageFlowController;
/**
* @jpf:controller
* @jpf:view-properties view-properties::
* <!-- このデータは自動生成されたものです。このセクションを編集することはお勧めしません。
* -->
* <view-properties>
* <pageflow-object id="pageflow:/Customer_Lookup/findCustomer/
* FindCustomerController.jpf"/>
* <pageflow-object id="action:begin.do">
* <property value="80" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="action:findCustomerInfo.do#Customer_Lookup.
* findCustomer.FindCustomerController.FindCustomerInfoForm">
* <property value="680" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="action-call:@page:findCustomer.jsp@#@action:
* findCustomerInfo.do#Customer_Lookup.findCustomer.FindCustomerController.
* FindCustomerInfoForm@">
* <property value="276,460,460,644" name="elbowsX"/>
* <property value="92,92,92,92" name="elbowsY"/>
* <property value="East_1" name="fromPort"/>
* <property value="West_1" name="toPort"/>
* </pageflow-object>
* <pageflow-object id="page:findCustomer.jsp">
* <property value="240" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="page:result.jsp">
* <property value="560" name="x"/>
* <property value="100" name="y"/>
* </pageflow-object>
* <pageflow-object id="forward:path#success#findCustomer.
* jsp#@action:begin.do@">
* <property value="116,160,160,204" name="elbowsX"/>
* <property value="92,92,92,92" name="elbowsY"/>
* <property value="East_1" name="fromPort"/>
* <property value="West_1" name="toPort"/>
* <property value="success" name="label"/>
 * </pageflow-object>
* <pageflow-object
* id="forward:path#success#result.jsp#@action:
* findCustomerInfo.do#Customer_Lookup.findCustomer.FindCustomerController.
* FindCustomerInfoForm@">
* <property value="644,620,620,596" name="elbowsX"/>
* <property value="81,81,81,81" name="elbowsY"/>
* <property value="West_0" name="fromPort"/>
* <property value="East_0" name="toPort"/>
* <property value="success" name="label"/>
* </pageflow-object>
* <pageflow-object id="formbeanprop:Customer_Lookup.findCustomer.
* FindCustomerController.FindCustomerInfoForm#name#java.lang.String"/>
 * <pageflow-object id="formbean:Customer_Lookup.findCustomer.
* FindCustomerController.FindCustomerInfoForm"/>
 * <pageflow-object id="action-call:@page:result.jsp@#@action:
* findCustomerInfo.do#Customer_Lookup.findCustomer.FindCustomerController.
* FindCustomerInfoForm@">
* <property value="596,620,620,644" name="elbowsX"/>
* <property value="92,92,81,81" name="elbowsY"/>
* <property value="East_1" name="fromPort"/>
* <property value="West_0" name="toPort"/>
* </pageflow-object>
* </view-properties>
* ::
*/
public class FindCustomerController extends PageFlowController
{
    // Global.app にアクセスするには、この宣言のコメントを解除します。
//
// protected global.Global globalApp;
//
    // ページ フローの例外処理の例については、{project}/WEB-INF/src/global/Global.app の「catch」および「exception-handler」の例の注釈
// を参照してください。
    /**
* このメソッドはページ フローへのエントリ ポイントを示します
* @jpf:action
* @jpf:forward name="success" path="findCustomer.jsp"
*/
    protected Forward begin()
{
return new Forward("success");
}
    /**
* @jpf:action
* @jpf:forward name="success" path="result.jsp"
*/
    protected Forward findCustomerInfo(FindCustomerInfoForm form)
{
return new Forward("success");
}
    /**
* FormData の get および set メソッドは、フォーム Bean エディタで上書きできます。
*/
    public static class FindCustomerInfoForm extends FormData
{
private String name;
public void setName(String name)
{
this.name = name;
}
        public String getName()
{
return this.name;
}
}
}

注意 : ページ フロー デザイナで、「ファイルが見つかりません」という警告が 2 つ表示される場合があります (緑の波線で表示)。これらは次の 2 つの手順で作成するファイルの参照であるため、無視してかまいません。

  1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

findCustomer.jsp の作成

findCustomer.jsp を作成するには、次の手順に従います。

  1. ファイル ツリーの findCustomer を右クリックし、[新規作成|JSP ファイル] を選択します (図 4-20)。
  2. 図 4-20 findCustomer の [新規作成|JSP ファイル] の選択

[新しいファイル] ダイアログ ボックス (図 4-21) が表示されます。

図 4-21 JSP ファイルが選択された [新しいファイル] ダイアログ ボックス


 
  • [Web User Interface] と [JSP ファイル] が選択されていることを確認します。選択されていない場合は、ここで選択します。
  • [ファイル名] に findCustomer と入力し、[作成] をクリックします。
  • ファイルが作成され、JSP Designer に新しい JSP テンプレートが表示されます (図 4-22)。

    図 4-22 新しい JSP テンプレート


     

    また、findCustomer フォルダに新しいファイルが表示されます (図 4-23)。

    図 4-23 findCustomer フォルダの findCustomer.jsp ファイル


     
    1. JSP Designer の下部で、[ソース ビュー] をクリックして JSP コードを表示します。
    2. コード リスト全体を選択し、削除します。
    3. コード リスト 4-5 のコードをコピーし、空の JSP Designer に貼り付けます。

    コード リスト 4-5 findCustomer.jsp サンプル コード

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
    <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
    <netui:html>
        <body>
    <p> Find Support Information </p>
    <netui:form action="findCustomerInfo">
    <div>
    Name:
    <netui:textBox dataSource="{actionForm.name}" defaultValue=
    ""></netui:textBox>
    <br/>
    </div>
    <netui:button value="Find Support Info" type="submit"/>
    </netui:form>
    </body>
    </netui:html>
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    result.jsp の作成

    result.jsp には、findCustomer ページ フロー (findCustomerController.jpf) が正常に実行された場合の最終ページについてのプレゼンテーション ロジックが保存されます 。顧客ルックアップ ポートレットで送信した名前が認証されると、このページが表示されて、指定された顧客のデータが提示されます。

    result.jsp を作成するには、次の手順に従います。

    1. Customer_Lookup/findCustomer の下の index.jsp を探し、右クリックして、ファイルのコンテキスト メニューを開きます (図 4-24)。
    2. 図 4-24 index.jsp のコンテキスト メニュー


       
    3. [名前の変更] を選択してファイル名の変更機能を開き、index.jspresult.jsp に変更します (図 4-25)
    4. 図 4-25 index.jspresult.jsp に置換されたファイル ツリー


       
    5. JSP Designer で、[ソース ビュー] を選択して JSP コードを表示します。
    6. コード リスト全体を強調表示し、削除します。
    7. コード リスト 4-6 のコード リストをコピーし、JSP Designer に貼り付けます。

    コード リスト 4-6 result.jsp のコード サンプル

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
    <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
    <netui:html>

    <body>
    <p>
    Support Case Information
    </p>

    Customer Name:

    <%=session.getAttribute("customerName")
    %>

    <%
    session.setAttribute("customerName", "");
    %>

    <netui:form action="findCustomerInfo">
    <netui:label value="{actionForm.name}"/>
    </netui:form>

    <div>

    <br>

    Support Case 001<br/>
    Support Case 002<br/>
    Support Case 003<br/>
    Support Case 004<br/>
    </div>

    </body>
    </netui:html>
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    注意 : JSP を両方とも保存した後に FindCustomerController.jpf を再び開くと、コード リスト 4-4 の後の「注意」で説明している警告は表示されません。

    顧客ルックアップ ポートレットの作成

    顧客ルックアップ ポートレットは、作成したページ フローと JSP のコンテナです。このファイルにバッキング ファイルを追加し、ポートレット間通信の確立に必要なイベント ハンドラを実装します。

    顧客ルックアップ ポートレットを作成するには、次の手順に従います。

    1. Customer_Lookup/findCustomer の下の FindCustomerController.jsp を右クリックして、ファイルのコンテキスト メニューを開きます (図 4-26)。
    2. 図 4-26 FindCustomerController.jpf のコンテキスト メニュー


       
    3. [ポートレットの生成] を選択します。
    4. [ポートレットの詳細] ダイアログ ボックス (図 4-27) が表示されます。

      図 4-27 [ポートレットの詳細] ダイアログ ボックス


       

      [タイトル] および [コンテンツ URI] は、ページ フローの名前に基づいてすでに入力されています (図 4-28)。

    5. [タイトル] を「Find Customer Information」に変更します。
    6. 図 4-28 [ポートレットの詳細] の詳細


       
    7. [完了] をクリックします。
    8. Customer_Lookup/findCustomer フォルダに、新しいポートレットが表示されます (図 4-29)。

      図 4-29 ファイル ツリーの FindCustomerController ポートレット


       

    バッキング ファイルの追加

    ここでは、バッキング ファイル receiveCustomerInfo.java をポートレット (FindCustomerController.portlet) に追加します。「手順 2 : バッキング ファイルの作成」で説明しているように、このファイルに記述されたビジネス ロジックによって、顧客ルックアップ ポートレットで送信した名前を持つ顧客に関する情報が含まれたペイロードをフェッチします。

    バッキング ファイルを追加するには、次の手順に従います。

    1. ファイル ツリーで、FindCustomerController.portlet をダブルクリックします。
    2. Portlet Designer にポートレットが表示されます (図 4-30)。

      図 4-30 Portlet Designer のポートレット


       
    3. プロパティ エディタの [ウィンドウ ポートレット] セクションで、[バッキング ファイル] を選択します。
    4. テキスト入力を受け入れるためのフィールドが開きます (図 4-31)。

      図 4-31 [バッキング ファイル] が選択されたプロパティ エディタ


       
    5. フィールドに backing.receiveCustomerInfo と入力し、〔Tab〕を押します。

    注意 : ファイル タイプ (.java) は入力しないでください。このフィールド内のドット区切り文字は、WebLogic Workshop でファイル パスの区切り文字として解釈されます。したがって、.java を入力すると、backing/FindCustomerBacking という存在しないフォルダの java というファイルが検索されます。

    バッキング ファイルが追加されました。

    イベント ハンドラの作成

    最後に、このポートレットのイベント ハンドラを作成します。この手順では、イベント ハンドラのタイプを選択し、リスンするポートレットを指定し、設定されたイベントが検出されたときに実行するアクションを定義します。

    イベント ハンドラを作成するには、次の手順に従います。

    1. Portlet Designer でポートレットを開き (図 4-30)、プロパティ エディタの [ウィンドウ ポートレット] セクションで [イベント ハンドラ] プロパティを探します。
    2. マウスを [イベント ハンドラ] データ入力フィールド上に移動し (「イベント ハンドラなし」と表示される)、編集フィールドを開きます (図 4-32)。
    3. 図 4-32 編集用に開いた [イベント ハンドラ] プロパティ


       
    4. データ入力フィールドの横にある省略記号 (...) をクリックします。
    5. イベント ハンドラ ツール (図 4-33) が表示されます。

      図 4-33 イベント ハンドラ ツール


       
    6. [ハンドラを追加] をクリックします。
    7. 使用可能なイベント ハンドラのメニューが表示されます (図 4-34)。

      図 4-34 イベント ハンドラのメニュー


       
    8. [カスタム イベントの処理] を選択します。
    9. [イベント] の一覧に [カスタム イベントの処理] が表示され、ダイアログ ボックスに追加のフィールドが表示されます (図 4-35)。

      図 4-35 [カスタム イベントの処理] が選択されたイベント ハンドラ ツール


       
    10. 表 4-1 の説明に従って、[カスタム イベントの処理] の各フィールドに必要事項を入力します。
    11. 表 4-1 [カスタム イベントの処理] のフィールド

      フィールド

      入力または選択

      イベント ラベル

      handleCustomEvent1 ([ハンドラを追加] の一覧で [カスタム イベントの処理] を選択した場合に表示されるデフォルト値)

      表示される場合のみ

      チェックをはずす

      リスン先 (ワイルドカード):

      任意

      イベント:

      myCustomEvent


       
    12. [アクションを追加] をクリックします。
    13. アクションのリストが表示されます (図 4-36)。

      図 4-36 [アクションを追加] のメニュー


       
    14. [BackingFile メソッドの呼び出し] を選択します。

    注意 : このオプションは、ポートレットにバッキング ファイルを追加した場合にのみ表示されます。表示されない場合は、「バッキング ファイルの追加」が正しく完了していることを確認してください。

    [イベント] リストに、[BackingFile メソッドの呼び出し] が表示され、ダイアログ ボックスの右側のペインが図 4-37 のように変化します。

    図 4-37 [BackingFile メソッドの呼び出し] がアクションとして追加されたイベント ハンドラ


     
  • [メソッド] ドロップダウン コントロールをクリックして使用可能なメソッドのリストを表示します (図 4-38)。
  • 図 4-38 [BackingFile メソッドの呼び出し] で使用可能なメソッドのリスト


     


     
  • listenCustomerName を選択します。
  • 手順 1 ~ 7 を繰り返します。
  • [アクションを追加] をクリックして [アクション] ドロップダウン メニューを開き、[PageFlow アクションの呼び出し] を選択します。
  • ダイアログ ボックスがリフレッシュされ、右側のペインに [アクション] 編集ボックスが表示されます。

  • ドロップダウン コントロールをクリックし、findCustomerInfo を選択します。
  • イベント ハンドラ ツールは、図 4-39 の例のようになっているはずです。

    図 4-39 findCustomer ポートレット用のイベント ハンドラ ツールの完了


     


     
  • [OK] をクリックしてダイアログ ボックスを閉じ、〔Tab〕を押してイベント ハンドラのデータ フィールドを閉じます。
  • [ファイルを保存] アイコンをクリックするか、[ファイル|すべて保存] を選択します。
  • 手順 4 : 注文ルックアップ ポートレットの作成

    注文ルックアップ ポートレットは、顧客ルックアップ ポートレットで送信した顧客に関する注文の情報を表示します。このポートレットは、顧客ルックアップ ポートレットと同じ構造ですが、正しく実行するために数種の異なるデータが必要です。

    注意 : 時間の節約およびファイル作成時の入力ミスの可能性をなくすため、このドキュメントでは必要なコードがあらかじめ準備されています。オンライン (HTML) で参照中の場合は、コードを切り取って適切な空のファイルに貼り付けることができます。このドキュメントの印刷版または PDF バージョンを使用しているためオンライン コピーを取得できない場合は、コード サンプルに表示されているとおりに正確にコードを入力してください。

    ページ フロー (FindOrderController.jpf) の作成

    FindOrder ページ フロー (FindOrderController.jpf) は、注文ルックアップ ポートレットで表示されるページの順序を設定します。このページ フローは、顧客ルックアップ ポートレットで名前が送信された後に実行されます。注文検索ページ フロー (FindOrderController.jpf) の作成は、「ページ フロー (FindCustomerController.jpf) の作成」で説明している顧客検索ページ フローの作成とまったく同じですが、含まれるデータが異なります。

    FindOrderController.jpf を作成するには、次の手順に従います。

    1. Orders_LookUp を右クリックし、[新規作成|ページ フロー] を選択します。
    2. [ページ フロー ウィザード - ページ フロー名] ダイアログ ボックスが表示されます。

    3. [ページ フロー名] に findOrder と入力します。
    4. [コントローラ名] に、FindOrderController という文字が自動的に挿入されます。

    5. [次へ] をクリックします。
    6. [ページ フロー ウィザード - ページ フロー タイプを選択] ダイアログ ボックスが表示されます。

    7. [基本のページ フロー] を選択し、[作成] をクリックします。
    8. 次の処理が発生します。

    ページ フロー デザイナの下部で [ソース ビュー] をクリックします。

    ページ フロー デザイナのソース ビューに、デフォルト ページ フローのコードが表示されます (図 4-41)。

    図 4-41 ソース ビューのデフォルトのページ フロー コード


     

    コード リスト全体を選択し、削除します。

    コード リスト 4-7 のコード サンプルをコピーし、ページ フロー デザイナのソース ビューに貼り付けます。

    コード リスト 4-7 FindOrderController.jpf コード サンプル

    package Orders_LookUp.findOrder;
    import com.bea.wlw.netui.pageflow.FormData;
    import com.bea.wlw.netui.pageflow.Forward;
    import com.bea.wlw.netui.pageflow.PageFlowController;
    /**
    * @jpf:controller
    * @jpf:view-properties view-properties::
    * <!-- このデータは自動生成されたものです。このセクションを編集することはお勧めしません。
    * -->
    * <view-properties>
    * <pageflow-object id="pageflow:/Orders_LookUp/findOrder/
    * FindOrderController.jpf"/>
    * <pageflow-object id="action:begin.do">
    * <property value="80" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="action:findOrders.do#Orders_LookUp.findOrder.
    * FindOrderController.FindOrdersForm">
    * <property value="420" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="action-call:@page:findOrderForm.jsp@#@action:
    * findOrders.do#Orders_LookUp.findOrder.FindOrderController.
    * FindOrdersForm@">
    * <property value="276,330,330,384" name="elbowsX"/>
    * <property value="92,92,92,92" name="elbowsY"/>
    * <property value="East_1" name="fromPort"/>
    * <property value="West_1" name="toPort"/>
    * </pageflow-object>
    * <pageflow-object id="page:findOrderForm.jsp">
    * <property value="240" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="page:orderResults.jsp">
    * <property value="600" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="forward:path#success#findOrderForm.jsp#@action:
    * begin.do@">
    * <property value="116,160,160,204" name="elbowsX"/>
    * <property value="92,92,92,92" name="elbowsY"/>
    * <property value="East_1" name="fromPort"/>
    * <property value="West_1" name="toPort"/>
    * <property value="success" name="label"/>
    * </pageflow-object>
     * <pageflow-object id="forward:path#success#orderResults.jsp#@action:
    * findOrders.do#Orders_LookUp.findOrder.FindOrderController.
    * FindOrdersForm@">
    * <property value="456,510,510,564" name="elbowsX"/>
    * <property value="92,92,92,92" name="elbowsY"/>
    * <property value="East_1" name="fromPort"/>
    * <property value="West_1" name="toPort"/>
    * <property value="success" name="label"/>
    * </pageflow-object>
    * <pageflow-object id="formbeanprop:Orders_LookUp.findOrder.
    * FindOrderController.FindOrdersForm#customer_name#java.lang.String"/>
    * <pageflow-object id="formbeanprop:Orders_LookUp.findOrder.
    * FindOrderController.FindOrdersForm#order_id#java.lang.String"/>
    * <pageflow-object id="formbean:Orders_LookUp.findOrder.FindOrderController.
    * FindOrdersForm"/>
    * <pageflow-object id="action-call:@page:orderResults.jsp@#@action:findOrders.
    * do#Orders_LookUp.findOrder.FindOrderController.FindOrdersForm@">
    * <property value="564,510,510,456" name="elbowsX"/>
    * <property value="92,92,81,81" name="elbowsY"/>
    * <property value="West_1" name="fromPort"/>
    * <property value="East_0" name="toPort"/>
    * </pageflow-object>
    * </view-properties>
    * ::
    */
    public class FindOrderController extends PageFlowController
    {
        // Global.app にアクセスするには、この宣言のコメントを解除します。
    //
    // protected global.Global globalApp;
    //
        // ページ フローの例外処理の例については、{project}/WEB-INF/src/global/Global.app の 
    // 「catch」および「exception-handler」の例の注釈を
    // 参照してください。
        /**
    * このメソッドはページ フローのエントリ ポイントを表します
    * @jpf:action
    * @jpf:forward name="success" path="findOrderForm.jsp"
    */
    protected Forward begin()
    {
    return new Forward("success");
    }
        /**
    * @jpf:action
    * @jpf:forward name="success" path="orderResults.jsp"
    */
    protected Forward findOrders(FindOrdersForm form)
    {
    return new Forward("success");
    }

    /**
    * FormData の get および set メソッドは、フォーム Bean エディタで上書きできます。
    */
    public static class FindOrdersForm extends FormData
    {
    private String order_id;

    private String customer_name;

    public void setCustomer_name(String customer_name)
    {
    this.customer_name = customer_name;
    }
            public String getCustomer_name()
    {
    return this.customer_name;
    }
            public void setOrder_id(String order_id)
    {
    this.order_id = order_id;
    }
            public String getOrder_id()
    {
    return this.order_id;
    }
    }
    }
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    注意 : ページ フロー デザイナで、「ファイルが見つかりません」という警告が 2 つ表示される場合があります (緑の波線で表示)。これらは次の 2 つの手順で作成するファイルの参照であるため、無視してかまいません。

    FindOrderController.jpf が作成されます。

    findOrderForm.jsp の作成

    次に、ページ フローを正しく実行するために必要な 2 つの JSP のいずれかを作成する必要があります。findOrder.jsp には、最初のポートレットを表示するためのプレゼンテーション ロジックが記述されます。顧客名を送信して、このポートレットからページ フローを起動できます。この例では、顧客ルックアップ ポートレットで送信された名前を注文ルックアップ ポートレットが受信したときにページ フローが起動されます。

    findOrderForm.jsp を作成するには、次の手順に従います。

    1. ファイル ツリーで [findOrder] を右クリックし、[新規作成|JSP] を選択します。
    2. [新しいファイル] ダイアログ ボックスが表示されます。[Web User Interface] と [JSP ファイル] が選択されていることを確認します。

    3. [ファイル名] に findOrderForm と入力し、[作成] をクリックします。
    4. 次の処理が発生します。

    5. JSP Designer の下部で [ソース ビュー] を選択します。
    6. JSP Designer のソース ビューに、デフォルト JSP のコードが表示されます。

    7. デフォルトのコード リスト全体を選択し、削除します。
    8. コード リスト 4-8 のコード サンプルをコピーし、JSP Designer に貼り付けます。

    コード リスト 4-8 findOrderForm.jsp サンプル コード

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>

    <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
    <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>

    <netui:html>
    <head>
    <title>
    Find Order
    </title>
    </head>
    <body>
    <p> Find Order </p>

    <%= //session.getAttribute("customerName")
    %>
            <netui:form action="findOrders">
    <table>
    <tr valign="top">
    <td>Customer_name:</td>
    <td>
    <netui:textBox dataSource="{actionForm.customer_name}"/>
    </td>
    </tr>
    <tr valign="top">
    <td>Order_id:</td>
    <td>
    <netui:textBox dataSource="{actionForm.order_id}"/>
    </td>
    </tr>
    </table>
    <br/> 
    <netui:button value="Find Orders" type="submit"/>
    </netui:form>
    </body>
    </netui:html>
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。
    2. findOrderForm.jsp が作成されます。

    orderResults.jsp の作成

    作成する 2 番目の JSP は、orderResults.jsp です。このファイルには、顧客名フィールドまたは注文 ID フィールドで指定した顧客について注文ルックアップの結果を表示するためのプレゼンテーション ロジックが記述されます。ただし、この例では、顧客ルックアップ ポートレットで送信した顧客名の注文情報が返されます。

    orderResults.jsp を作成するには、次の手順に従います。

    1. Orders_LookUp/findCustomer の下の index.jsp をダブルクリックします。
    2. JSP Designer に、「新しい Web アプリケーション ページ」というテキストが表示されます。これがデフォルトの JSP です。

    3. JSP Designer の下部で [ソース ビュー] をクリックします。
    4. JSP Designer がリフレッシュされてデフォルトの JSP コードが表示されます。

    5. デフォルトの JSP コード全体を選択し、削除します。
    6. コード リスト 4-9 のコード サンプルをコピーし、JSP Designer に貼り付けます。

    コード リスト 4-9 orderResults.jsp コード サンプル

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
    <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
    <netui:html>
    <head>
    <title>
    Web Application Page
    </title>
    </head>
    <body>
    <p>
           Customer Name: <%=session.getAttribute("customerName")
    %>
    <%
    session.setAttribute("customerName", "");
    %>
    <netui:form action="findOrders">

    <netui:label value="{actionForm.customer_name}"/>
    </netui:form>
    <br>
    Order 001<br>
    Order 002<br>
    Order 003<br>
    Order 004<br>
    <br>

    </body>
    </netui:html>
    1. [保存] をクリックするか、[ファイル|保存] を選択して、ファイルを保存します。
    2. ファイル ツリーで index.jsp を右クリックしてコンテキスト メニューを開き、[名前の変更] を選択します。
    3. 名前変更のためにノードが開きます。

    4. ファイル名を orderResults に変更します。

    注意 : JSP を両方とも保存した後に FindCustomerController.jpf を再び開くと、コード リスト 4-7 の後の「注意」で説明している警告は表示されません。

    ポートレット ファイルの作成

    ポートレット ファイル FindOrderController.portlet は、作成したページ フローおよび JSP のコンテナです。このファイルにバッキング ファイルを追加し、ポートレット間通信の確立に必要なイベント ハンドラを実装します。

    注文ルックアップ ポートレットを作成するには、次の手順に従います。

    1. FindOrderController.jpf を右クリックしてコンテキスト メニューを開き、[ポートレットの生成] を選択します (図 4-43)。
    2. 図 4-43 FindOrderController.portlet の生成


       

      ポートレット ウィザードの [ポートレットの詳細] ダイアログ ボックスが表示されます。[タイトル] および [ポートレット URI] の各フィールドには、すでにデータが挿入されています。

    3. [タイトル] を「Find Orders」に変更します。
    4. [完了] をクリックします。
    5. ポートレットが作成され、ファイル ツリーの Orders_LookUp/findOrder の下に表示されます。

    バッキング ファイルの追加

    ここでは、バッキング ファイル ListenCustomerName.java をポートレット (FindOrderController.portlet) に追加します。「手順 2 : バッキング ファイルの作成」で説明しているように、このファイルに記述されたビジネス ロジックによって、顧客ルックアップ ポートレットで送信した名前を持つ顧客の注文情報をフェッチします。

    バッキング ファイルを追加するには、次の手順に従います。

    1. ファイル ツリーで、FindCustomerController.portlet をダブルクリックします。
    2. Portlet Designer にポートレットが表示されます。

    3. プロパティ エディタの [ウィンドウ ポートレット] セクションで、[バッキング ファイル] を選択します。
    4. テキスト入力を受け入れるためのフィールドが開きます。

    5. フィールドに backing.ListenCustomerName と入力し、〔Tab〕を押します。
    6. 図 4-44 ポートレットへの ListenCustomerName.java の追加


       

    注意 : ファイル タイプ (.java) は入力しないでください。このフィールド内のドット区切り文字は、WebLogic Workshop でファイル パスの区切り文字として解釈されます。したがって、.java を入力すると、backing/FindCustomerBacking という存在しないフォルダの java というファイルが検索されます。

    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。
    2. バッキング ファイルが追加されました。

    イベント ハンドラの作成

    最後に、このポートレットのイベント ハンドラを作成します。この手順では、イベント ハンドラのタイプを選択し、リスンするポートレットを指定し、設定されたイベントが検出されたときに実行するアクションを定義します。

    イベント ハンドラを作成するには、次の手順に従います。

    1. Portlet Designer でポートレットを開き (図 4-30)、プロパティ エディタの [ウィンドウ ポートレット] セクションで [イベント ハンドラ] プロパティを探します。
    2. マウスを [イベント ハンドラ] データ入力フィールド上に移動すると (「イベント ハンドラなし」と表示される)、編集フィールドが開きます。
    3. データ入力フィールドの横にある省略記号 (...) をクリックします。
    4. イベント ハンドラ ツール (図 4-45) が表示されます。

      図 4-45 イベント ハンドラ ツール


       
    5. [ハンドラを追加] をクリックします。
    6. 使用可能なイベント ハンドラのメニューが表示されます (図 4-46)。

      図 4-46 イベント ハンドラのメニュー


       
    7. [カスタム イベントの処理] を選択します。
    8. [イベント] の一覧に [カスタム イベントの処理] が表示され、ダイアログ ボックスに追加のフィールドが表示されます (図 4-47)。

      図 4-47 [カスタム イベントの処理] が選択されたイベント ハンドラ ツール


       
    9. 表 4-2 の説明に従って、[カスタム イベントの処理] の各フィールドに必要事項を入力します。
    10. 表 4-2 [カスタム イベントの処理] のフィールド

      フィールド

      入力または選択

      イベント ラベル

      handleCustomEvent1 ([ハンドラを追加] の一覧で [カスタム イベントの処理] を選択した場合に表示されるデフォルト値)

      表示される場合のみ

      チェックをはずす

      リスン先 (ワイルドカード):

      任意

      イベント:

      myCustomEvent


       
    11. [アクションを追加] をクリックします。
    12. アクションのリストが表示されます (図 4-48)。

      図 4-48 [アクションを追加] のメニュー


       
    13. [BackingFile メソッドの呼び出し] を選択します。

    注意 : このオプションは、ポートレットにバッキング ファイルを追加した場合にのみ表示されます。表示されない場合は、「バッキング ファイルの追加」が正しく完了していることを確認してください。

    [イベント] リストに、[BackingFile メソッドの呼び出し] が表示され、ダイアログ ボックスの右側のペインが図 4-49 のように変化します。

    図 4-49 [BackingFile メソッドの呼び出し] がアクションとして追加されたイベント ハンドラ


     
  • [メソッド] ドロップダウン コントロールをクリックして、使用可能なメソッドのリストを表示します。
  • listenCustomerName を選択します。
  • 手順 1 ~ 8 を繰り返します。ただし、手順 8 では、[PageFlow アクションの呼び出し] を選択します。
  • [メソッド] ドロップダウン コントロールをクリックして、使用可能なメソッドのリストを表示します。
  • findOrders を選択します。
  • イベント ハンドラ ツールは、図 4-50 の例のようになっているはずです。

    図 4-50 findCustomer ポートレット用のイベント ハンドラ ツールの完了


     


     
  • [OK] をクリックします。
  • [ファイルを保存] アイコンをクリックするか、[ファイル|すべて保存] を選択します。
  • まとめ

    この時点で、ipcText Web アプリケーションの注文ルックアップ ポートレットが完了しています。必要なすべてのファイルが作成されているかどうかを確認するには、ファイル ツリーの Orders_LookUp フォルダと 図 4-51 を比較します。ファイル ツリーは、例の中のツリーと一致する必要があります。

    図 4-51 注文ルックアップ ポートレットが完了した Orders_LookUp フォルダ


     

    手順 5 : 顧客ルックアップ ポートレットの作成

    顧客ルックアップ ポートレットは、この実習で作成する最後のポートレットです。このポートレットにユーザが顧客名を入力し、システムに送信します。この送信によって作成されるイベントを「手順 3 : 顧客ルックアップ結果ポートレットの作成」および「手順 4 : 注文ルックアップ ポートレットの作成」で作成したポートレットが受信し、適切なアクションを開始します。

    注意 : 時間の節約およびファイル作成時の入力ミスの可能性をなくすため、このドキュメントでは必要なコードがあらかじめ準備されています。オンライン (HTML) で参照中の場合は、コードを切り取って適切な空のファイルに貼り付けることができます。このドキュメントの印刷版または PDF バージョンを使用しているためオンライン コピーを取得できない場合は、コード サンプルに表示されているとおりに正確にコードを入力してください。

    ページ フロー (FindCustomerController.jpf) の作成

    FindCustomerController.jpf は、顧客ルックアップ ポートレットで表示されるページの順序を設定します。このページ フローは、このポートレットで名前が送信された後に実行されます。顧客ルックアップ ページ フローの作成は、この実習の他のページ フローの作成とまったく同じですが、含まれるデータが異なります。

    注意 : この FindCustomerController.jpf を「手順 3 : 顧客ルックアップ結果ポートレットの作成」で作成した FindCustomerController.jpf と混同しないでください。同一の名前は、このデモンストレーションの特質です。

    FindCustomerController.jpf を作成するには、次の手順に従います。

    1. portlets を右クリックし、[新規作成|ページ フロー] を選択します。
    2. [ページ フロー ウィザード - ページ フロー名] ダイアログ ボックスが表示されます。

    3. [ページ フロー名] に findCustomer と入力します。
    4. [コントローラ名] に、FindCustomerController という文字が自動的に挿入されます。

    5. [次へ] をクリックします。
    6. [ページ フロー ウィザード - ページ フロー タイプを選択] ダイアログ ボックスが表示されます。

    7. [基本のページ フロー] を選択し、[作成] をクリックします。
    8. 次の処理が発生します。

    9. ページ フロー デザイナの下部で [ソース ビュー] を選択します。
    10. ページ フロー デザイナの表示がリフレッシュされて、デフォルトのページ フローのコードが表示されます。


       
    11. ページ フロー デザイナの全内容を強調表示して削除し、ソース ビューを空にします。
    12. コード リスト 4-10 のコード サンプルをコピーし、ページ フロー デザイナの空のソース ビューに貼り付けます。

    コード リスト 4-10 FindCustomerController.jpf コード サンプル (第 2 バージョン)

    package portlets.findCustomer;
    import com.bea.wlw.netui.pageflow.FormData;
    import com.bea.wlw.netui.pageflow.Forward;
    import com.bea.wlw.netui.pageflow.PageFlowController;

    /**
    * @jpf:controller
    * @jpf:view-properties view-properties::
    * <!-- このデータは自動生成されたものです。このセクションを編集することはお勧めしません。
    * -->
    * <view-properties>
    * <pageflow-object id="pageflow:/portlets/findCustomer/
    * FindCustomerController.jpf"/>
    * <pageflow-object id="action:begin.do">
    * <property value="80" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="page:index.jsp">
    * <property value="240" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="forward:path#success#index.jsp#@action:begin.do@">
    * <property value="116,160,160,204" name="elbowsX"/>
    * <property value="92,92,92,92" name="elbowsY"/>
    * <property value="East_1" name="fromPort"/>
    * <property value="West_1" name="toPort"/>
    * <property value="success" name="label"/>
    * </pageflow-object>
    * <pageflow-object id="page:result.jsp">
    * <property value="580" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="action:findCustomer.do#portlets.findCustomer.
    * FindCustomerController.FindCustomerForm">
    * <property value="420" name="x"/>
    * <property value="100" name="y"/>
    * </pageflow-object>
    * <pageflow-object id="forward:path#success#result.jsp#@action:findCustomer.
    * do#portlets.findCustomer.FindCustomerController.FindCustomerForm@">
    * <property value="456,500,500,544" name="elbowsX"/>
    * <property value="92,92,92,92" name="elbowsY"/>
    * <property value="East_1" name="fromPort"/>
    * <property value="West_1" name="toPort"/>
    * <property value="success" name="label"/>
    * </pageflow-object>
    * <pageflow-object id="formbean:portlets.findCustomer.FindCustomerController.
    * FindCustomerForm"/>
    * <pageflow-object id="formbeanprop:portlets.findCustomer.
    * FindCustomerController.FindCustomerForm#name#java.lang.String"/>
    * <pageflow-object id="formbeanprop:portlets.findCustomer.
    * FindCustomerController.FindCustomerForm#company#java.lang.String"/>
    * <pageflow-object id="action-call:@page:index.jsp@#@action:findCustomer.
    * do#portlets.findCustomer.FindCustomerController.FindCustomerForm@">
    * <property value="276,330,330,384" name="elbowsX"/>
    * <property value="92,92,92,92" name="elbowsY"/>
    * <property value="East_1" name="fromPort"/>
    * <property value="West_1" name="toPort"/>
    * </pageflow-object>
    * </view-properties>
    * ::
    */
    public class FindCustomerController extends PageFlowController
    {

    // Global.app にアクセスするには、この宣言のコメントを解除します。
    //
    // protected global.Global globalApp;
    //

    // ページ フローの例外処理の例については、{project}/WEB-INF/src/global/Global.app の
    // 「catch」および「exception-handler」の例の注釈を
    // 参照してください。

    /**
    * このメソッドは、ページ フローへのエントリ ポイントを表します
    * @jpf:action
    * @jpf:forward name="success" path="index.jsp"
    */
    protected Forward begin()
    {
    return new Forward("success");
    }

    /**
    * @jpf:action
    * @jpf:forward name="success" path="result.jsp"
    */
    protected Forward findCustomer(FindCustomerForm form)
    {
    return new Forward("success");
    }

    /**
    * FormData の get メソッドと set メソッドは、フォーム Bean エディタで上書きできます。
    */
    public static class FindCustomerForm extends FormData
    {
    private String company;

    private String name;

    public void setName(String name)
    {
    this.name = name;
    }

    public String getName()
    {
    return this.name;
    }

    public void setCompany(String company)
    {
    this.company = company;
    }

    public String getCompany()
    {
    return this.company;
    }
    }
    }

    注意 : ページ フロー デザイナで、「ファイルが見つかりません」という警告が表示される場合があります (緑の波線で表示)。これは「result.jsp の作成」で作成するファイル result.jsp の参照であるため、この警告は無視してかまいません。

    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    index.jsp の更新

    これは Web アプリケーションの 3 つのページ フローの「起動パッド」であるため (つまり、このポートレットで名前を送信すると、ポートレット間通信を通じて、この手順で作成しているポートレットのほか、「手順 3 : 顧客ルックアップ結果ポートレットの作成」および 手順 4 : 注文ルックアップ ポートレットの作成」で作成したポートレットでページ フロー アクションが発生する)、この実習ではベスト プラクティスに従って、このページ フローを index.jsp ファイルから始めます。

    この JSP は、顧客名を送信する前の顧客ルックアップ ポートレットのプレゼンテーション ロジックとなります。名前を送信すると、このロジックの代わりに、次の手順で作成する result.jsp のプレゼンテーション ロジックが使用されます。「ページ フロー (FindCustomerController.jpf) の作成」でページ フローを作成したとき、index.jsp のテンプレートが作成され、portlets/findCustomer に保存されました。

    index.jsp を作成するには、次の手順に従います。

    1. ファイル ツリーの portlets/findCustomer の下の index.jsp をダブルクリックします。
    2. JSP Designer のデザイン ビューで、ファイルが表示されます。

    3. JSP Designer の下部で [ソース ビュー] をクリックします。
    4. JSP Designer がリフレッシュされてデフォルトの index.jsp コードが表示されます。

    5. JSP Designer で、コード リスト全体を選択し、削除します。
    6. コード リスト 4-11 のコード サンプルをコピーし、JSP Designer に貼り付けます。

    コード リスト 4-11 index.jsp コード サンプル

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
    <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
    <netui:html>
    <head>
    <title>
    Web Application Page
    </title>
    </head>
    <body>
    <p> New Web Application Page </p>
    <netui:form action="findCustomer">
    <table>
    <tr valign="top">
    <td>Company:</td>
    <td>
    <netui:textBox dataSource="{actionForm.company}"/>
    </td>
    </tr>
    <tr valign="top">
    <td>Name:</td>
    <td>
    <netui:textBox dataSource="{actionForm.name}"/>
    </td>
    </tr>
    </table>
    <br/> 
    <netui:button value="findCustomer" type="submit"/>
    </netui:form>
    </body>
    </netui:html>
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    result.jsp の作成

    次に、result.jsp ファイルを作成します。このファイルには、FindCustomerController ページ フローが正しく表示された後、このポートレットに返される情報の表示を書式化するためのプレゼンテーション ロジックを記述します。このロジックは、index.jsp のロジックより優先されます。

    result.jsp を作成するには、次の手順に従います。

    1. [portlets/findCustomer] を右クリックし、[新規作成|JSP ファイル] を選択します。
    2. [新しいファイル] ダイアログ ボックスが表示されます。[Web User Interface] と [JSP ファイル] が選択されていることを確認します。選択されていない場合は、ここで選択します。

    3. [ファイル名] に result と入力し、[作成] をクリックします。
    4. 次の処理が発生します。

    5. JSP Designer の下部で [ソース ビュー] をクリックします。
    6. JSP Designer がリフレッシュされて、デフォルト JSP のコードが表示されます。

    7. デフォルトの JSP コード全体を選択し、削除します。
    8. コード リスト 4-12 のコード サンプルをコピーし、JSP Designer に貼り付けます。

    コード リスト 4-12 result.jsp コード サンプル

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <%@ taglib uri="netui-tags-databinding.tld" prefix="netui-data"%>
    <%@ taglib uri="netui-tags-html.tld" prefix="netui"%>
    <%@ taglib uri="netui-tags-template.tld" prefix="netui-template"%>
    <netui:html>
    <head>
    <title>
    Find Customer Result
    </title>
    </head>
    <body>
    <br>
    Customer Information:
    <br>
    <br>

    <netui:form action="findCustomer">

    <b>Name: <netui:label value="{actionForm.name}"/>
    <br>
    Address: 4001 Discovery Drive<br>
    City: Boulder<br>
    State: CO<br></b>
    </b>
    </netui:form>
    </body>
    </netui:html>
    1. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    注意 : result.jsp を保存した後に FindCustomerController.jpf を再び開くと、コード リスト 4-10 の後の「注意」で説明している警告は表示されません。

    ポートレット ファイルの作成

    ポートレット ファイル FindOrderController.portlet は、作成したページ フローおよび JSP のコンテナです。このファイルにバッキング ファイルを追加し、ポートレット間通信の確立に必要なイベント ハンドラを実装します。

    顧客ルックアップ ポートレットを作成するには、次の手順に従います。

    1. portlets/findCustomer の下の FindCustomerController.jpf を右クリックして、ファイルのコンテキスト メニューを開きます。
    2. [ポートレットの生成] を選択します。
    3. [ポートレットの詳細] ダイアログ ボックスが表示されます。[タイトル] および [コンテンツ URI] は、ページ フローの名前に基づいてすでに入力されています。

    4. [タイトル] を「Find Customer」に変更します。
    5. [完了] をクリックします。
    6. portlets/findCustomer フォルダに新しいポートレットが表示されます。

    バッキング ファイルの追加

    ここでは、バッキング ファイル FindCustomerBacking.java をポートレット (FindCustomerController.portlet) に追加します。

    バッキング ファイルを追加するには、次の手順に従います。

    1. ファイル ツリーで、FindCustomerController.portlet をダブルクリックします。
    2. Portlet Designer にポートレットが表示されます。

    3. プロパティ エディタの [ウィンドウ ポートレット] セクションで、[バッキング ファイル] を選択します。
    4. テキスト入力を受け入れるためのフィールドが開きます。

      図 4-52 [バッキング ファイル] が選択されたプロパティ エディタ


       
    5. フィールドに backing.FindCustomerBacking と入力し、〔Tab〕を押します。

    注意 : ファイル タイプ (.java) は入力しないでください。このフィールド内のドット区切り文字は、WebLogic Workshop でファイル パスの区切り文字として解釈されます。したがって、.java を入力すると、backing/FindCustomerBacking という存在しないフォルダの java というファイルが検索されます。

    バッキング ファイルが追加されました。

    イベント ハンドラの作成

    最後に、このポートレットのイベント ハンドラを作成します (「手順 3 : 顧客ルックアップ結果ポートレットの作成」および「手順 4 : 注文ルックアップ ポートレットの作成」で作成したポートレットとは異なり、このポートレットではイベント ハンドラを 1 つだけ使用します)。この手順では、イベント ハンドラのタイプを選択し、リスンするポートレットを指定し、設定されたイベントが検出されたときに実行するアクションを定義します。

    イベント ハンドラを作成するには、次の手順に従います。

    1. Portlet Designer でポートレットを開き、プロパティ エディタの [ウィンドウ ポートレット] セクションで [イベント ハンドラ] プロパティを探します。
    2. マウスを [イベント ハンドラ] データ入力フィールド上に移動すると (「イベント ハンドラなし」と表示される)、編集フィールドが開きます。
    3. データ入力フィールドの横にある省略記号 (...) をクリックします。
    4. イベント ハンドラ ツール (図 4-53) が表示されます。

      図 4-53 イベント ハンドラ ツール


       
    5. [ハンドラを追加] をクリックします。
    6. 使用可能なイベント ハンドラのメニューが表示されます (図 4-54)。

      図 4-54 イベント ハンドラのメニュー


       
    7. [PageFlow イベントの処理] を選択します。
    8. [イベント] の一覧に [PageFlow イベントの処理] が表示され、ダイアログ ボックスに追加のフィールドが表示されます (図 4-55)。

      図 4-55 [PageFlow イベントの処理] が選択されたイベント ハンドラ ツール


       
    9. 表 4-3 の説明に従って、[PageFlow イベントの処理] の各フィールドに必要事項を入力します。
    10. 表 4-3 [PageFlow イベントの処理] のフィールド

      フィールド

      入力または選択

      イベント ラベル

      handlePageFlowEvent1 ([ハンドラを追加] の一覧で [PageFlow イベントの処理] を選択した場合に表示されるデフォルト値)

      表示される場合のみ

      チェックをはずす

      リスン先 (ワイルドカード):

      なし

      アクション:

      findCustomer


       
    11. [アクションを追加] をクリックします。
    12. アクションのリストが表示されます (図 4-56)。

      図 4-56 [アクションを追加] のメニュー


       
    13. [BackingFile メソッドの呼び出し] を選択します。

    注意 : このオプションは、ポートレットにバッキング ファイルを追加した場合にのみ表示されます。表示されない場合は、「バッキング ファイルの追加」が正しく完了していることを確認してください。

    [イベント] リストに、[BackingFile メソッドの呼び出し] が表示され、ダイアログ ボックスの右側のペインが図 4-57 のように変化します。

    図 4-57 [BackingFile メソッドの呼び出し] がアクションとして追加されたイベント ハンドラ


     
  • [メソッド] ドロップダウン コントロールをクリックして、使用可能なメソッドのリストを表示します。
  • foundCustomer を選択します。
  • イベント ハンドラ ツールは、図 4-58 の例のようになっているはずです。

    図 4-58 findCustomer ポートレット用のイベント ハンドラ ツールの完了


     


     
  • [OK] をクリックします。
  • [ファイルを保存] アイコンをクリックするか、[ファイル|すべて保存] を選択します。
  • まとめ

    顧客ルックアップ ポートレットのイベント ハンドラの作成によって、この実習の 3 つのポートレットのすべてが作成されました。必要なファイルがすべて作成されていることを確認するには、現在のバージョンの WebLogic Workshop のファイル ツリーを 図 4-59 の例と比較してください。

    図 4-59 すべてのポートレットの完了後のファイル ツリー


     

    次は、「手順 6 : ポータル ファイルの作成とデータ入力」の説明に従って、作成した 3 つのポートレットをポータルに追加します。

    手順 6 : ポータル ファイルの作成とデータ入力

    この手順では、対話をするポートレットが含まれ、.portal ファイルを特徴とするポータルを作成し、これらのポートレットをポータルに追加します。

    ポータル ファイルの作成

    ポータル ファイルを作成するには、次の手順に従います。

    1. ファイル ツリーで、Web アプリケーション名 (ipcTest) を右クリックし、[新規作成|ポータル] を選択します (図 4-60)。
    2. 図 4-60 新しいポータルの作成


       

      [新しいファイル] ダイアログ ボックス (図 4-61) が表示されます。

      図 4-61 新しいポータルの作成用にコンフィグレーションされた [新しいファイル] ダイアログ ボックス


       
    3. [ファイル名] に、AW と入力します。
    4. [作成] をクリックします。
    5. ファイル AW.portal が作成され、以下が表示されます。

    6. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ファイルを保存します。

    ポータルへのポートレットの追加

    実際のポータル アプリケーションの作成の最後の手順は、新しく作成したポートレットを新しく作成したポータルに追加することです。そのためには、次の手順に従います。

    1. データ パレットの各ポートレットを選択し、図 4-65 で示すように、ポータル内の適切な位置にドラッグします。
    2. 図 4-65 ポータルへのポートレットの追加


       
    3. [保存] アイコンをクリックするか [ファイル|保存] を選択して、ポータルを保存します。

    手順 7 : ポータルのテスト

    この最後の手順では、この実習で予定されたとおりにポートレット間通信が確立されたかどうかを確認します。WebLogic Server を起動し、ポータルを実行し、ユーザ名を送信します。名前を送信すると、ポートレット間で通信が行なわれ、特定のユーザのデータが返される必要があります。

    ポータルをテストするには、次の手順に従います。

    注意 : WebLogic Workshop で AW.portal が開いていることを確認します。

    1. [ツール|WebLogic Server|WebLogic Server の起動] を選択して、サーバを起動します。
    2. サーバを起動中であることを示す進捗状況メーターが表示されます (図 4-66)。

      図 4-66 サーバの起動状況を示す進捗メーター


       

      サーバが起動するまで少し時間がかかります。進捗状況メーターが表示されなくなると、サーバは実行中です。WebLogic Workshop の下部で、インジケータが緑色になり、「サーバが実行中です」と表示されます (図 4-67)。

      図 4-67 「サーバが実行中です」のインジケータ


       
    3. ツールバーの [開始] アイコンをクリックして、ポータルを実行します (図 4-68)。
    4. 図 4-68 [開始] アイコン


       

      注意 : このアイコンをクリックすると、ポータルが表示される前にデバッガが実行されます。

      テスト ブラウザにポータルが表示されます (図 4-69)。

      図 4-69 テスト ブラウザでのポータルの表示


       

    ポータルのテスト

    ポータルをテストする (つまり、IPC が正しく実行されることを示す) には、次の手順を実行します。

    1. [Find Customer] ポートレットで、[Company] に XYZ Systems、[Name] に Bob Smith とそれぞれ入力します。
    2. [findCustomer] をクリックします。
    3. 3 つのポートレットがすべてリフレッシュされて Bob Smith の顧客情報と注文情報が表示されます (図 4-70)。

      図 4-70 顧客情報と注文情報が表示されたテスト ブラウザ


       


       

     

    Skip navigation bar  ページの先頭 前 次