ユーザごとにパーソナライズするポートレットを開発するには,ユーザ情報取得Beanを使用します。ユーザ情報取得Beanの詳細は,「14.6 ユーザ情報取得Bean」を参照してください。ユーザごとにパーソナライズするには,リポジトリの設定が必要です。必要な設定については,マニュアル「uCosminexus Portal Framework システム管理者ガイド」の「ユーザ管理情報の検討」の説明を参照してください。
パーソナライズ情報は,リポジトリに保管されます。そのため,パーソナライズ情報はシリアライズできるオブジェクトに限られます。
パーソナライズするポートレットでは,編集画面を使用します。編集画面の遷移を次の図に示します。
図A-2 編集画面の遷移
ポータル全体で編集画面のインタフェースを統一するため,ポートレットの編集画面では,次の表に示すボタンおよび動作を実装します。
表A-2 ポートレットの編集画面でのボタンおよび動作
ボタン | 必須 | 動作 |
---|---|---|
適用 | ○ | パーソナライズ情報を更新して,再度編集画面を表示します。 |
戻る | ○ | パーソナライズ情報を更新しないでパーソナライズを終了します。終了後は,ポートレットのサマリ画面を表示します。 |
標準に戻す | × | システム管理者が設定した内容またはポートレットの初期設定に戻して,再度編集画面を表示します。 |
パーソナライズするポートレットのサンプルを次に示します。
このサンプルには,メイン(main.jsp),サマリ(summary.jsp),コントローラ(controller.jsp),およびエディタ(edit.jsp)のファイルがあります。メインおよびサマリは,それぞれメイン画面用およびサマリ画面用のファイルです。コントローラは,ログインチェック,ロジックの呼び出し,および画面モードに応じてViewを呼び出します。エディタは,パーソナライズの結果を保存したり,編集画面を作成したりします。
(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>