付録A.5 ユーザごとにパーソナライズするポートレット

ユーザごとにパーソナライズするポートレットを開発するには,ユーザ情報取得Beanを使用します。ユーザ情報取得Beanの詳細は,「14.6 ユーザ情報取得Bean」を参照してください。ユーザごとにパーソナライズするには,リポジトリの設定が必要です。必要な設定については,マニュアル「uCosminexus Portal Framework システム管理者ガイド」の「ユーザ管理情報の検討」の説明を参照してください。

パーソナライズ情報は,リポジトリに保管されます。そのため,パーソナライズ情報はシリアライズできるオブジェクトに限られます。

パーソナライズするポートレットでは,編集画面を使用します。編集画面の遷移を次の図に示します。

図A-2 編集画面の遷移

[図データ]

ポータル全体で編集画面のインタフェースを統一するため,ポートレットの編集画面では,次の表に示すボタンおよび動作を実装します。

表A-2 ポートレットの編集画面でのボタンおよび動作

ボタン必須動作
適用パーソナライズ情報を更新して,再度編集画面を表示します。
戻るパーソナライズ情報を更新しないでパーソナライズを終了します。終了後は,ポートレットのサマリ画面を表示します。
標準に戻す×システム管理者が設定した内容またはポートレットの初期設定に戻して,再度編集画面を表示します。
(凡例)
○:必須
×:任意

パーソナライズするポートレットのサンプルを次に示します。

このサンプルには,メイン(main.jsp),サマリ(summary.jsp),コントローラ(controller.jsp),およびエディタ(edit.jsp)のファイルがあります。メインおよびサマリは,それぞれメイン画面用およびサマリ画面用のファイルです。コントローラは,ログインチェック,ロジックの呼び出し,および画面モードに応じてViewを呼び出します。エディタは,パーソナライズの結果を保存したり,編集画面を作成したりします。

<この項の構成>
(1) コントローラ(controller.jsp)
(2) エディタ(edit.jsp)

(1) コントローラ(controller.jsp)

{PROJECT_HOME}¥portlets¥customize¥controller.jsp

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="jp.co.hitachi.soft.portal.portlet.beans.PortletInfoBean" %>
<%@ page import="jp.co.hitachi.soft.portal.api.user.PortalUserInfoBean" %>
<%
 String uri = "error.jsp";
 try {
   PortletInfoBean pInfo = new PortletInfoBean();
   pInfo.initBean(request);

   PortalUserInfoBean userInfo = new PortalUserInfoBean();
   userInfo.setRequest(request);

   // ログイン済みかチェック
   if (userInfo.checkLoggedIn()) {
     PortletInfoBean.Mode mode = pInfo.getMode();

     if (mode == PortletInfoBean.Mode.DEFAULT) {
       // ここにサマリ画面用業務ロジック呼び出しを追加する

       uri = "summary.jsp";
     } else if (mode == PortletInfoBean.Mode.MAXIMIZE) {
       // ここに最大化画面用の業務ロジック呼び出し追加する

       uri = "main.jsp";
     } else if (mode == PortletInfoBean.Mode.EDIT) {
       uri = "edit.jsp";
     }
   }
 } catch (Exception ioe) {
   // エラーメッセージ出力
   uri = "error.jsp";
 }
%>
<!-- includeを用いたビューの呼び出し -->
<jsp:include page="<%= uri %>" flush="true"/>

(2) エディタ(edit.jsp)

{PROJECT_HOME}¥portlets¥customize¥edit.jsp

<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="jp.co.hitachi.soft.portal.api.user.PortalUserInfoBean" %>
<%@ taglib uri="http://soft.hitachi.co.jp/portal/standard" prefix="portal" %>
<%@ taglib uri="http://soft.hitachi.co.jp/portal/urlutils" prefix="uu" %>
<%
 String def1 = "default1";  String def2 = "defautl2";
 String prop1, prop2;  // プロパティ
 PortalUserInfoBean userInfo = new PortalUserInfoBean();
 userInfo.setRequest(request);

 // 編集情報保存処理
 String editType = request.getParameter("edittype");
 // サイトのエンコーディングがShift_JISの場合,次の処理を行う。
 editType = new String(editType.getBytes("iso-8859-1"),"Windows-31J");
 if ("apply".equals(editType)) {
   // 適用ボタンの処理(POSTデータを参照し変更を適用)
   prop1 = request.getParameter("prop1");
   prop2 = request.getParameter("prop2");
   userInfo.setCustomizeInfo("prop1", prop1);  userInfo.setCustomizeInfo("prop2", prop2);
 } else if ("restore".equals(editType)) {
   // デフォルトボタン(初期値に変更)
   prop1 = def1;                               prop2 = def2;
   userInfo.setCustomizeInfo("prop1", prop1);  userInfo.setCustomizeInfo("prop2", prop2);
 } else {
   prop1 = (String)userInfo.getCustomizeInfo("prop1");
   prop2 = (String)userInfo.getCustomizeInfo("prop2");
   if (prop1 == null) { prop1 = def1; }
   if (prop2 == null) { prop2 = def2; }
 }
%>
<script type="text/JavaScript">
<!--
 function returnHome() {
   document.location = "<portal:uriLookup type="Home" />";
 }
 function restore() {
   document.editForm.edittype.value = "restore";
   document.editForm.mysubmit.click();
 }
-->
</script>
<!-- コントローラ経由でPOSTする -->
<uu:form name="editForm" action="controller.jsp" method="POST">
プロパティ1 <input type="text" name="prop1" value="<%= prop1 %>"> <br>
プロパティ2 <input type="text" name="prop2" value="<%= prop2 %>"> <br>
<p>
<input type="hidden" name="edittype" value="apply">
<input type="submit" value="適用" name="mysubmit">
<input type="button" value="戻る" onclick="returnHome()">
<input type="button" value="標準に戻す" onclick="restore()">
</p>
</uu:form>