SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

続 Struts 2入門

Strutsプラグインで単体テストからレポート作成、共通デザインの作成まで
- JUnitプラグイン、JasperReportsプラグイン、Tilesプラグイン

続・Struts2入門(10)

  • X ポスト
  • このエントリーをはてなブックマークに追加

サイト共通デザインをテンプレート化する - Tilesプラグイン

 Tilesプラグインは、Struts 1時代でも使われていました、Web共通レイアウトを定義するためのテンプレートライブラリであるTilesを利用するプラグインです。レイアウトごとにJSPやHTMLなどを分割し、同じ内容のコンテンツにはリソースを再利用することができます。現在はバージョン2がリリースされており(Tiles2と呼ばれています)、Struts 2用の機能拡張もされています。

ライブラリの準備

 今回のライブラリはApache Tilesから最新版であるtiles-2.2.2-binを選択します。ダウンロードファイルを解凍し、次のjarファイルを/WEB-INF/libフォルダへコピーします。

  • tiles-core.jar
  • tiles-servlet.jar
  • tiles-jsp.jar
  • tiles-api.jar

 また、Tiles2は次のライブラリも使っていますので、併せてダウンロードします。

  • commons-digester 2.0以降(最新は2.1)
  • slf4j 1.5以降(最新は1.6.1)

 commons-digesterはApache commons - commons digester、slf4jはSLF4J - Simple Logging Facade for Javaよりダウンロード後解凍し、以下の3つのjarファイルを/WEB-INF/libフォルダへコピーします。

  • commons-digester.jar
  • jcl-over-slf4j.jar
  • slf4j-log4j12.jar(※今回のサンプルでlog4jを利用しているので必須となっています)

 Struts 2のTilesプラグインについてはStruts 2のコアパッケージに同梱されていますので別途入手の必要はありません。Tilesプラグインの設定をすることで利用できるようになっていますので、これでライブラリの準備は完了です。

Tilesの設定

 設定する内容は、Tilesプラグインの設定と、Tilesそのものの設定の2種類になります。まずはTilesプラグインの設定です。

 Webアプリケーションのweb.xmlに、次のリスナー設定を追加することでTilesプラグインが有効になります。

リスト5 Tilesプラグインの有効化をしたweb.xml(抜粋)
<?xml version="1.0" encoding="UTF-8"?>
<web-app …(省略)… >
    <listener>
        <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
    </listener>
</web-app>

 次にTilesの設定を行います。Tilesの設定は、画面レイアウト定義用のJSPファイルと、レイアウトの内容を定義したxmlファイルの2つになります。例えば、次の図のような画面レイアウトを想定します。

図4 サンプルの画面レイアウト
図4 サンプルの画面レイアウト

 画面は、ヘッダー、メニュー、ボディ(本文)、フッターの4つのブロックに分割しています。この分割されたレイアウト定義のJSPファイルは次のようになります。

リスト6 レイアウト定義JSP
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isELIgnored="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
…(省略)…
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
…(省略)…
<head>
  <!-- HTMLのタイトルもTiles定義から取得 -->
  <title><tiles:getAsString name="title"/></title>
</head>

<body>
<table border="0">
  <!-- ヘッダー -->
  <tr>
    <td colspan="2">
      <tiles:insertAttribute name="header" />
    </td>
  </tr>
  <!-- 左パネルメニュー / 右パネルボディー -->
  <tr>
    <td>
      <tiles:insertAttribute name="menu" />
    </td>
    <td>
      <tiles:insertAttribute name="body" />
    </td>
  </tr>
  <!-- フッター -->
  <tr>
    <td colspan="2">
      <tiles:insertAttribute name="footer" />
    </td>
  </tr>
</table>
</body>
</html>

 単純にブロックをテーブルで区切ります。Tilesを利用するため、JSPの<head>より前の行で <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>が必須となります。JSP中でtiles:の接頭辞で書かれているタグが、Tilesの機能として使われます。今回はこの中で使われている2つの機能を利用してコンテンツを表示します。

表1 Tiles設定項目(抜粋)
要素名 概要
getAsString Tiles定義ファイルから、nameに指定した値をそのまま出力する
insertAttribute Tiles 定義ファイルから、nameに指定した値のレスポンス結果を出力する

 insertAttributeではレイアウトごとに区切った画面を設定しています。

 次にTiles定義ファイルです。Webアプリケーションの/WEB-INF以下に、tiles.xmlを作成します。以下がその内容となります。

リスト7 Tiles定義ファイル(tiles.xml)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
  <definition name="tiles.sample" template="success.jsp">
    <put-attribute name="title" value="Tilesサンプルのタイトルです" />
    <put-attribute name="header" value="/tiles/header.jsp" />
    <put-attribute name="menu" value="/tiles/menu.jsp" />
    <put-attribute name="body" value="/tiles/body.jsp" />
    <put-attribute name="footer" value="/tiles/footer.jsp" />
  </definition>
</tiles-definitions>

 <definition>要素のname属性はアプリケーション内で使われる画面名となります。この値がStruts 2のActionクラスで呼び出されます。テンプレートとなるファイルをtemplate属性で指定します。この画面で参照される内容を、その子要素である<put-attribute>で指定します。

 <put-attribute>要素では、それぞれの名前に対応した値や表示する画面を指定します。複数の画面を設定する場合には、<definition>要素を増やしていきます。

 以上で設定は終わりです。

Actionクラス

 最後はこのTilesの画面を呼び出すActionクラスです。Tilesプラグインを使うActionでは次のルールに従います。

  • tiles-defaultパッケージを継承する
  • Resultにtilesを指定する

 具体的にソースを見てみましょう。サンプルとなるActionクラスは以下のようになります。

リスト8 Tilesプラグインを利用するActionクラス(抜粋)
// 名前空間=URLのパス
@Namespace("/tiles")
// tiles-default継承
@ParentPackage("tiles-default")
// Actionの戻り結果
@Results({
    @Result(name="success" , type="tiles" , location="tiles.sample" ),
})

public class TilesSampleAction extends ActionSupport {
    @Action("")
    public String execute() throws Exception {
        return "success";
    }
}

 大切なところは2か所、@ParentPackageにtiles-defaultを設定すること、@Resultのtype値にtilesを指定し、その遷移先をtiles.xmlで定義した画面名とすることだけです。Actionクラスの実装には、Tiles用に対応するコードを追加することなく使えます。

 最後にサンプルを動かした結果が次の図になります。http://127.0.0.1:8080/sample/tiles/ をブラウザで見てみましょう。

図5 サンプルの画面の出力結果
図5 サンプルの画面の出力結果

 このようにレイアウトごとに分割をすることができ、それぞれJSPも利用できますので、JSPの再利用も容易になります。

まとめ

 以上簡単ではありますが、Struts 2の解説を終わりとしたいと思います。今まで紹介してきましたインターセプタやプラグインは、すべての場面で必ず使うというものではなく、ケースに合わせて簡単に使い分けられるようにできています。Struts 2本体もまだまだ拡張や改良が進められている最中ですから、今後また大変化をする可能性を秘めています。私の方で個人的に進めているStruts 2の解析サイトもありますので、もし参考にされたい方がいましたら、そのときは引き続きよろしくお願いいたします。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
続 Struts 2入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 東 浩二(アズマ コウジ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5661 2011/01/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング