3.11.2 MVCモデル

業務ロジックが複雑な場合は,MVCモデルと呼ばれるアプローチでポートレットを開発します。

MVCモデルとは,業務ロジック(Model),表示(View),制御(Controller)に分けてアプリケーションを開発する考え方です。業務と画面デザインを分離して開発できるため,効率良く開発できます。

MVCモデルをポートレット開発にあてはめた場合,ModelにはBean/EJB,ViewにはJSP/HTML,Controllerにはデフォルトアクションモジュールを使用します。Controllerにデフォルトアクションモジュールを利用すると,ポータル統合画面と連携した画面を制御できます。

MVCモデルを次の図に示します。

図3-11 MVCモデル

[図データ]

図の説明
  1. Controllerは,リクエストのパラメタ(URLのパスやクエリなど)を基に,適切なModelのsetter/getter/業務メソッドを呼び出します。Modelは,データの保存/返却/業務処理をします。
  2. Controllerは,リクエストのパラメタやModelの状態を基に,適切なViewを選択し呼び出します。Viewは,Modelから必要なデータを取得し,画面を表示します。

ControllerとViewのサンプルを次に示します。

<この項の構成>
(1) Controllerの開発
(2) Viewの開発

(1) Controllerの開発

手順
  1. デフォルトアクションモジュールを用いてControllerを開発します。
    Controllerでは,リクエストのパラメタやModelの状態を基にViewへ渡すパラメタを決定します。デフォルトアクションモジュールからJSP(View)へのパラメタ渡しには,actionメソッドで渡されるrequestの属性を使用します。
    注意事項
    属性は,統合画面内の全ポートレットで共通に使用されます。そのため,属性の名前には,一意の名前を指定してください。
  2. 開発したデフォルトアクションモジュールの名前を,デプロイ定義ファイル(hportlet.xml)のconfig-param要素に設定します。
    config-param要素の設定方法については,「8.3.3 ポートレットのデプロイ」を参照してください。
  3. Portal Managerでデプロイします。
    ポートレットのデプロイについては,マニュアル「uCosminexus Portal Framework システム管理者ガイド」の「ポートレットの登録」の説明を参照してください。
Controllerのサンプル

public class SampleControllerActionModule extends DefaultActionModule
{
   public void action(HttpServletRequest req, HttpServletResponse res) {
       req.setAttribute("page", Controller(req));
   }

   //コントローラ用メソッド
   public String Controller(HttpServletRequest req){
       //Attributeにcontrollerがセットされていたら,Stringオブジェクトに変換する。
       String ControllerParameter = (String)req.getParameter("controller");
       // サイトのエンコーディングがShift_JISの場合,次の処理を行う。
       ControllerParameter = new String(ControllerParameter.getBytes("iso-8859-1"),"Windows-31J");

       //デフォルト表示用JSP名をセットする。
       String JSPFILE = "default.jsp";

       //クエリにNEWMAILが指定されている場合
       if("NEWMAIL".equals(ControllerParameter)){
           //JSP表示を行うJSP名を返却する。
           return "newmail.jsp";
       }
       //クエリにADDRESSが指定されている場合
       else if("ADDRESS".equals(ControllerParameter)){
           //JSP表示を行うJSP名を返却する。
           return "address.jsp";
       }

       return JSPFILE;
   }
}

(2) Viewの開発

JSPを使用して,パラメタの値に応じて表示内容を切り替えるポートレットコンテンツを開発します。日立APIポートレットのサンプルソース(index.jsp)は,パラメタpageの値(default.jsp,newmail.jsp,address.jsp)に応じて表示内容を切り替えます。

index.jsp

<hr>メールポートレットの画面<hr>
<%
//
//デフォルトアクションモジュールが設定した属性を判断し,画面に表示するコンテンツを切り替えます。
// ここでは,pageというAttributeを参照し, 表示コンテンツをControlします。

String view = (String)request.getAttribute("page");

if (page != null) {%>
<jsp:include page="<%= view %>" flush="true"/>
<% }%>

default.jsp

<hr>
初期状態の画面です。

newmail.jsp

<hr>
メールが到着した際の画面です。

address.jsp

<hr>
アドレス帳の画面です。