JSPでお手軽マスターページ

穴埋め発掘ネタ。

Smart Web Layout

JSPでもASP.NETのマスターページのように、共通部分はテンプレートを使用してレイアウトしたいよね、っということで。
Javaの場合、この用途にはTilesやSitemeshがあるわけですが(・ω・)
でも、設定ファイルとか使いたくねーし、JSPだけで完結してーし( ゚д゚)、ッ…っというニーズのための、お手軽レイアウトライブラリを作ったので下記で公開。
https://github.com/usausa/Java-Smart-WebLayout

使い方

公開しているサンプルはTomcatプロジェクトになっているので、とりあえず動作確認はできると思いますが。
使用例として見るのは、個別ページ部分のindex.jspとテンプレートのmaster.jsp


まずindex.jspについて。

<layout:master template="master">

<layout:parameter key="title" value="ホーム"/>

<layout:content name="body">
ページ固有のコンテンツ
</layout:content>

</layout:master>

テンプレートで置換する部分をで囲み、テンプレート中で置き換えを行う部分はで記述します。
また、個別ページからテンプレートにパラメータとして渡したい項目はで指定します。


次にマスターページのmaster.jspはこんな感じで。

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">

<title><layout:value key="title"/></title>

</head>

<body id="body">

<h1><layout:value key="title"/></h1>

<div id="main">
<layout:place name="body"/>
</div>

</body>
</html>

個別ページのコンテンツで置換したい部分はプレースホルダを指定します。
で設定された項目については、を使用するとその内容が出力されます。
また、についてはvar属性を指定すると、その名称でページスコープの変数として設定されます。


っで、実際にindex.jspの処理が行われると、ページが合成されて出力は下記の様になりますだ(・ω・)

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">

<title>ホーム</title>

</head>

<body id="body">

<h1>ホーム</h1>

<div id="main">

ページ固有のコンテンツ

</div>

</body>
</html>

共通テンプレートを使ったレイアウトが出来ていますね(・∀・)

タグ一覧

タグの一覧を簡単に解説。

master

個別ページで使用。
このタグ部分がマスターページで置換される。
templateで属性マスターページとして使うJSPを指定。

content

個別ページで使用。
マスターページ内に合成されるコンテンツを記述。
name属性でマスターページにおけるプレースホルダの場所を指定。

parameter

個別ページで使用。
マスターページに引き渡すパラメータをkey属性とvalue属性で指定。

place

マスターページで使用。
個別ページで記述したcontentの内容が合成される部分のプレースホルダを指定。

value

マスターページで使用。
個別ページで指定したparameterの内容を使用。
key属性で指定した内容の出力、またはvar属性が指定された場合は変数への設定。

partial

どこでも使用。
Smart Web Layoutライブラリではweb.xml中で下記の様なパラメータを指定した場合、ビューの記述の省略が可能。

<context-param>
  <param-name>smart.web.layout.PREFIX</param-name>
  <param-value>/WEB-INF/views/</param-value>
</context-param>

<context-param>
  <param-name>smart.web.layout.SUFFIX</param-name>
  <param-value>.jsp</param-value>
</context-param>

この設定であれば、template="master"のような記述で実際に使用されるjspは/WEB-INF/views/master.jspとなる。
partialタグは上記に対応したinclude処理のSmart Web Layout版。



っというわけで、このレイアウトタグライブラリはお手軽&ピュアJSPなのでその他のライブラリと組み合わせ自由という感じなのですが、どうでしょう(・ω・)?