Webコンテンツポートレットでは,uCosminexus Portal Framework独自の構文でテンプレートを作成します。また,テンプレート内で,HttpServletRequestオブジェクト,HttpSessionオブジェクトにアクセスできます。
(1) HttpServletRequest/HttpSessionへのアクセス
テンプレート内で,HttpServletRequestへは$request,HttpSessionへは$sessionの変数名でアクセスすることができます。設定例を次に示します。
$session.setAttribute("pageno", $pageno);
(2) uCosminexus Portal Frameworkでサポートする構文
uCosminexus Portal Frameworkでは,独自の構文でテンプレートを作成できます。サポートする構文を次に示します。
表6-1 Webコンテンツポートレットのテンプレートで使用する構文
構文 | 内容 |
---|---|
# | コメントを指定します。 |
set | 変数に値をセットします。 |
get | 変数が配列の場合に,値を取り出します。 |
if-else | if/elseif/elseによる条件分岐を設定します。 |
foreach | ループ処理を設定します。 |
(a) #
コメントを指定します。コメントはテンプレートの出力に含めません。
## 文字列
#*
文字列
*#
## 一行コメントです。
#*
複数行コメントです。
ページには表示されません。
*#
(b) set
変数の値の設定を行います。値の設定部分は丸括弧でくくります。
#set( {変数|プロパティ} = {変数|文字列|プロパティ|メソッド|数値} )
#set( $portal = "aaa")
#set( $bbb = $portal)
#set( $bbb = $bar ) ## 変数
#set( $bbb.Bar = "portal" ) ## 文字列
#set( $bbb.Bar = $portal.aaa ) ## プロパティ
#set( $bbb.Bar = $portal.set($web)) ## メソッド
#set( $bbb.Number = 123 ) ## 数値
(c) get
変数が配列の場合に,値を取り出します。配列の最初の要素は「0」とします。
各コンポーネントの出力は文字列または1次元の配列によって構成されますが,正規表現での抽出による出力結果だけ,2次元の配列として出力されます。このため,指定する方法が異なります。
●正規表現の抽出以外から取得する場合
変数.get(数値)
$aaa.get(0) ## 変数aaaの配列から最初の要素を取得
$bbb.get(2) ## 変数bbbの配列から3番目の要素を取得
●正規表現の抽出結果から取得する場合
変数.get(数値).get(数値)
$out.get(0).get(0) ## http://portal1.comを取得
$out.get(2).get(1) ## Portal3を取得
(d) if-else
if/elseif/elseによる条件分岐を設定します。
#if( [条件1] ) [条件1を満たす場合の処理]
[ #elseif( [条件n] ) [条件nを満たす場合の処理] ]*※
[ #else [上記条件をすべて満たさない場合の処理] ]
#end
if/elseifでは項目の条件内では,比較演算子,論理演算子を使用可能とします。
表6-2 if-elseで使える演算子
演算子 | 説明 |
---|---|
== | 両方のオブジェクトが同じであるかどうかを判定します。 |
< | 右辺のオブジェクトが左辺のオブジェクトより大きいかどうかを判定します。 |
> | 左辺のオブジェクトが右辺のオブジェクトより大きいかどうかを判定します。 |
&& | 条件がANDであることを表します。 |
|| | 条件がORであることを表します。 |
! | 条件がNOTであることを表します。 |
#if ($aaa < 10)
…
#elseif ($aaa == 10)
…
#else
…
#end
##論理AND
#if ($aaa && $bar)
…
#end
##論理OR
#if ($aaa || $bar)
…
#end
##論理NOT
#if (!$aaa)
…
#end
(e) foreach
foreachによるループ処理を設定します。
正規表現による項目切り出しで切り出した繰り返し項目を変数名に指定して,直接ループさせることができます。また,範囲演算子[n..m]を指定して,ループさせることもできます。
#foreach( 変数 in {変数|範囲演算子} ) 処理 #end
<ul>
#foreach ($item in $items)
<li>$item</li>
#end
</ul>
#foreach ( $step in [0..10]) #0から10までカウントアップ
…
#end
(f) 配列アクセス
繰り返し項目や,出力キー重複によって配列となっているデータについては,size()メソッドによってデータ件数を取得することができます。
変数.size()
#set( $item_count = $url.size())
(3) ページ送りを設定する
ページ送りは,次の変数で指定します。ページ送りを使用する場合は,[ポートレット編集]画面(テンプレート適用パラメタ設定画面)でページ送り対象データを指定する必要があります。なお,[ポートレット編集]画面(テンプレート適用パラメタ設定画面)の詳細については,「10.3.5(8) テンプレート適用パラメタ設定画面」を参照してください。
変数名 | 説明 |
---|---|
$pageno | 現在処理対象のページ番号です。数値として保持されます。最初のページ番号を1とします。 |
$prevpage | 現在処理対象ページの前ページ番号です。現在の処理対象が1ページの場合は,0を指定します。 |
$nextpage | 現在処理対象ページの次ページ番号です。次ページがない場合でも現在の処理対象ページ+1を指定します。 |
$havenext | 次ページが存在するかどうかです。存在する場合は「true」,存在しない場合は「false」を指定します。 |
$startindex | 現在のページ内に表示するレコードの開始位置です。数値として保持されます。 |
$endindex | 現在のページ内に表示するレコードの終了位置です。数値として保持されます。 |
$portleturi | ページ送り処理用のURL文字列を展開します。 |
次に設定例を示します。
##開始位置から終了位置まで繰り返す
#foreach ($i in [$startindex..$endindex])
<a href="$url.get($i)">$headline.get($i)</a><br />
#end
#if ($pageno > 1)
<a href="$portleturi?pageno=$prevpage">前へ</a>
#end
#if ($havenext == true)
<a href="$portleturi?pageno=$nextpage">次へ</a>
#end
(4) テンプレート作成時の注意事項
テンプレートに日本語を記述する場合,set構文でいったん変数に格納してから使用してください。
#set($portalname = “ポータル名”)
<a href="$url">$portalname</a>
(5) テンプレートの作成例
#set($site1title = “サイト1”)
<table>
<tr>
<td>$site1title</td>
</tr>
#foreach($site in $site0)
<tr>
<td><a href="$site0.get($site).get(0)">$site0.get($site).get(1)</td>
<td>$site0.get($site).get(2)</td>
</tr>
#end
</table>