Tiles2を使ってみる
Tiles を使ってみる - chuchieの日記を参考に自分もTilesを使ってみた。
Jarの追加
Strut2についてくる以下のJarを追加。
さらにTiles2で依存しているJarも追加。
- commons-beanutils-1.7.0.jar
- commons-digester-1.8.jar
- commons-logging-1.1.1.jar
pluginの有効化
レイアウトの定義
/WEB-INF/tiles.xml を作成する
従来(Struts1.x)とほぼ同じでテンプレートの定義をする。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <tiles-definitions> <definition name="default.layout" template="/WEB-INF/tiles/layout.jsp"> <put-attribute name="title" value="default title" /> <put-attribute name="header" value="/WEB-INF/tiles/header.jsp" /> <put-attribute name="main" value="" /> <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" /> </definition> </tiles-definitions>
layout.jspの作成
テンプレートの元となるレイアウトを作成する。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <html> <head> <title><tiles:getAsString name="title" /></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div id="header"><tiles:insertAttribute name="header" /></div> <div id="main"><tiles:insertAttribute name="main" /></div> <div id="footer"><tiles:insertAttribute name="footer" /></div> </body> </html>
Tilesを使うページの作成(例:ログイン画面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> <%@ taglib prefix="s" uri="/struts-tags"%> <tiles:insertDefinition name="default.layout"> <tiles:putAttribute name="title" value="login build on tiles2" /> <tiles:putAttribute name="main"> <s:form action="login"> <s:label value="EMail" /> <s:textfield key="email" /> <br> <s:label value="Password" /> <s:password key="password" /> <br> <s:submit /> <br> <a href="<s:url action="register" />">Register User</a> </s:form> </tiles:putAttribute> </tiles:insertDefinition>
「default.layout」で未指定となってる"main"部分を今回は直接記述してみた。
いままでどおりにするならば、tiles.xmlにログイン画面用のテンプレートを定義してその中で"main"として組み込むページを定義してたと思うんだけど…。
んで、Tiles1のときはこのテンプレートの定義名でURL呼び出しできた(Struts1.xが対応してくれてただけ?)んだけどもTiles2ではできなかった。
となると、実際にアクセスするlogin.jspを作成してその中で「
さらにそこから組み込まれる本物のlogin画面が必要になるみたいで…。
まだTiles2の使い方を把握してないからかもしれないけど、1つの画面で2個もページを作成するのはどうだろう…。
(ケースバイケースでは有効かもしれないけど)
てことで、今回は直接記述してみたわけ。
Struts2のドキュメントに「Tiles-Plugin使うときはresult-typeの定義してね」てあったけど、参考ページにもあるように追加しなくても普通に動いた…。
なんにせよFaceletsぽいテンプレートエンジンは好きです(関係なしw)