XSLTスタイルシートを介して,XMLデータをポータルに取り込めます。
XMLデータの取り込みを次の図に示します。
図A-3 XMLデータの取り込み
アクセスするクライアントに応じて,XMLデータを変換します。また,UserAgent情報取得Beanを使用すると,アクセスしてきたクライアントに応じて,XSLTスタイルシートを変更できます。UserAgent情報取得Beanの詳細は,「14.8 UserAgent情報取得Bean」を参照してください。
XSLTスタイルシートは,次のディレクトリに格納します。
{PROJECT_HOME}¥portlets¥ポートレット名¥PORTLET-INF¥xslt
日立APIポートレットでは,<ut:convert>タグライブラリ内に,XMLデータを記述します。また,<ut:convert>のxslt属性には,XSLTスタイルシート名を指定します。タグライブラリの詳細は,「14.2 ポートレットユティリティタグライブラリ」を参照してください。
XSLTを用いたポートレットのサンプルを次に示します。このサンプルでは,ユーザに割り当てられた仕事一覧を表示します。データベースなどから,仕事一覧をXMLデータとして取得します。XSLTスタイルシートを使用して,クライアントがPCの場合はテーブルで,携帯電話(iモード,およびEZweb)の場合はリストで表示します。また,XMLデータの取得および<ut:convert>タグライブラリでは,<ut:cache>タグライブラリを使用して,60分ごとにデータを更新します。
(1) 日立APIポートレットの例
日立APIポートレットでXMLデータを取り込む例を次に示します。
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="jp.co.hitachi.soft.portal.portlet.PortletUtils" %>
<%@ page import="jp.co.hitachi.soft.portal.portlet.beans.PortletInfoBean" %>
<%@ page import="jp.co.hitachi.soft.portal.api.user.PortalUserInfoBean" %>
<jsp:useBean id="useragentInfo" scope="session"
class="jp.co.hitachi.soft.portal.portlet.beans.UserAgentInfoBean" />
<%@ taglib uri="http://soft.hitachi.co.jp/portal/utils" prefix="ut" %>
<%
String ns = PortletUtils.getNamespace(request, response);
String xslt;
try {
PortalUserInfoBean userInfo = new PortalUserInfoBean();
userInfo.setRequest(request);
useragentInfo.initBean(request);
if (useragentInfo.getUserAgentGroup().equals("PCBrowser")) {
xslt = "table.xsl"; // PCはtable形式で出力
} else {
xslt = "list.xsl"; // PC以外はlist形式で出力
}
// ログイン済みかチェック
if (userInfo.checkLoggedIn()) {
PortletInfoBean pInfo = new PortletInfoBean();
pInfo.initBean(request);
PortletInfoBean.Mode mode = pInfo.getMode();
if (mode == PortletInfoBean.Mode.DEFAULT ||
mode == PortletInfoBean.Mode.MAXIMIZE) {
String cacheKey = ns+"key";
%>
<ut:cache name="<%= cacheKey %>" time="60" scope="session">
<ut:convert xslt="<%= xslt %>">
<!-- XMLデータ(ログインユーザの仕事一覧)読み込み処理 -->
</ut:convert>
</ut:cache>
<%
} else { throw new Exception("未サポートの画面モード"); }
} else { throw new Exception("ログインが必要です"); }
} catch (Exception e) {
// エラー出力
}
%>
(2) XMLデータ
XMLデータの例として,ユーザに割り当てられた仕事一覧を示します。
<task-list>
<item>
<title>提案書作成</title>
<deadline>2002/04/01</deadline>
<priority>高</priority>
<detail>http://mytask/task.cgi?id=11111</detail>
</item>
<item>
<title>営業方針検討資料作成</title>
<deadline>2002/04/11</deadline>
<priority>標準</priority>
<detail>http://mytask/task.cgi?id=12111</detail>
</item>
</task-list>
(3) PC用XSLTスタイルシート
PC用に,テーブルに変換するXSLTスタイルシートの例を次に示します。
{PROJECT_HOME}¥portlets¥weather¥xslt¥table.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="//task-list">
<table border="1">
<tr><th>タイトル</th><th>期限</th><th>優先度</th></tr>
<xsl:for-each select="item">
<tr>
<td><a href="{detail}"><xsl:value-of select="title"/></a></td>
<td><xsl:value-of select="deadline"/></td>
<td><xsl:value-of select="priority"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
(4) iモード用XSLTスタイルシート
iモード用に,リストに変換するXSLTスタイルシートの例を次に示します。
{PROJECT_HOME}¥portlets¥weather¥xslt¥list.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="//task-list">
<ol>
<xsl:for-each select="item">
<li>
<xsl:variable name="number"><xsl:number/></xsl:variable>
<a href="{detail}" accesskey="{$number}">
<xsl:value-of select="title"/></a>
(<xsl:value-of select="deadline"/>)
</li>
</xsl:for-each>
</ol>
</xsl:template>
</xsl:stylesheet>