Struts2とTiles
Struts2でTilesを使用する方法
必要なjarファイルは以下のもの
- commons-beanutils-1.7.0.jar
- commons-collections-3.2.jar
- commons-digester-1.8.jar
- struts2-tiles-plugin-2.1.6.jar
- tiles-api-2.0.6.jar
- tiles-core-2.0.6.jar
- tiles-jsp-2.0.6.jar
そしてweb.xmlに以下のフィルターを記述
<listener> <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> </listener>
<result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/> </result-types>
基本設定は以上で終了。
続いて使用するレイアウト用のJSPと設定ファイルのtiles.xml
tiles.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN" "http://tiles.apache.org/dtds/tiles-config_2_0.dtd"> <tiles-definitions> <definition name="default.layout" template="/WEB-INF/classes/sample/tiles/layout.jsp"> <put-attribute name="header" value="/WEB-INF/classes/sample/tiles/header.jsp"/> <put-attribute name="content" value="/WEB-INF/classes/sample/tiles/content.jsp"/> <put-attribute name="footer" value="/WEB-INF/classes/sample/tiles/footer.jsp"/> </definition> </tiles-definitions>
<definition name="default.layout" template="/WEB-INF/classes/sample/tiles/layout.jsp">
でレイアウト用のJSPの指定をし、「default.layout」という名前で宣言します。
<put-attribute name="header" value="/WEB-INF/classes/sample/tiles/header.jsp"/>
でレイアウト用JSP内で使用するJSPを「header」という名前で宣言します。
layout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="/struts-tags" prefix="s" %><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta name="author" content="shhirose"> <title>Insert title here</title> </head> <body> <tiles:insertAttribute name="header"/> <tiles:insertAttribute name="content"/> <tiles:insertAttribute name="footer"/> </body> </html>
まずはレイアウト用のJSP
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
Tilesのタグを使用するためにタグリブ宣言をします。
<tiles:insertAttribute name="header"/>
「header」という名前で設定してあるJSPをこれが記載されている位置に表示します。(tiles.xmlを参照)
main.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %><%@ taglib uri="/struts-tags" prefix="s" %><tiles:insertDefinition name="default.layout"/>
DOCTYPEやHTMLタグはlayout.jspに記載されているので省略します。
<tiles:insertDefinition name="default.layout"/>
「default.layout」という名前で宣言されているJSPをこれが記載されている位置に表示します。(tiles.xmlを参照)
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="/struts-tags" prefix="s" %><div style="border-style:solid;border-color:#00FF00;border-weight:5px;">ヘッダー</div>
とりあえず簡単なものを。
main.jspと同じようにDOCTYPE等は記述しません。
この要領でcontent.jsp、footer.jspを記述していきます。
content.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="/struts-tags" prefix="s" %><div style="border-style:solid;border-color:#0000FF;border-weight:5px;">コンテンツ</div>
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ taglib uri="/struts-tags" prefix="s" %><div style="border-style:solid;border-color:#FF0000;border-weight:5px;">フッター</div>
あとはmain.jspを呼んでください。
そうするとヘッダー、コンテンツ、フッターという文字が表示されたページが表示されると思います。
呼び出しは以下の順?
- main.jsp
- tiles.xml(default.layout)
- layout.jsp
- tiles.xml(header)
- header.jsp
- tiles.xml(content)
- content.jsp
- tiles.xml(footer)
- footer.jsp
直接呼び出せるのはtile.xmlで「definition」タグで指定したものしかできないらしい。
「put-attribute」タグで宣言したものは「definition」タグで指定したJPSを経由しないとエラーになってしまう。
直接layout.jspは呼べないものか・・・。