之前發了有關套版的Sitemesh3 配置教學
所以這次就換了tiles
不過要跟各位客倌說聲抱歉呀~
因為我只會配置Struts2+Tiles呀~
不過如果都要撘配Struts2的話~我會比較喜歡用tiles
開始之前還沒有配置Struts2的人可以先去看Struts2 架構配置教學
這次配置會用到的jar檔如下請先加到lib裡面
struts2-tiles-plugin-2.2.3.jar
tiles-jsp-2.0.6.jar
tiles-api-2.0.6.jar
tiles-core-2.0.6.jar
commons-digester-2.0.jar
commons-beanutils-1.7.0.jar
commons-collections-3.1.jar
再將tiles-jsp-2.0.6.jar裡面的META-INF底下的tld資料夾裡面的tiles-jsp.tld這個檔案
複製到專案裡面的WEB-INF底下
再將下列配置加到web.xml裡面
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
討厭鬼的範例
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>leather</display-name>
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
先在WebContent底下新增一個資料夾要叫什麼都可以
討厭鬼在這邊叫tiles
在這個資料夾裡面新一個叫leather_base.jsp的版面~當然要叫什麼都可以
討厭鬼的內容如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/tiles-jsp.tld" prefix="tiles"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!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">
<link rel="stylesheet" type="text/css" href="../css/leather.css" media="screen" />
<link rel="stylesheet" type="text/css" href="../css/jquery-ui-1.8.19.custom.css" media="screen" />
<link rel="stylesheet" type="text/css" href="../css/ui.jqgrid.css" media="screen" />
<link rel="stylesheet" type="text/css" href="../css/ui.multiselect.css" media="screen" />
<script type="text/javascript" src="../js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="../js/jquery-ui-1.8.19.custom.min.js"></script>
<script type="text/javascript" src="../js/jquery.jqGrid.min.js"></script>
<script type="text/javascript" src="../js/grid.locale-cn.js"></script>
<title>討厭鬼教學</title>
</head>
<body>
<div class="container">
<tiles:insertAttribute name="leather_header"/>
<div class="main">
<tiles:insertAttribute name='leather_main'/>
</div>
<tiles:insertAttribute name="leather_footer"/>
</div>
</body>
</html>
在這邊只有兩點要注意
1、請加入<%@ taglib uri="/WEB-INF/tiles-jsp.tld" prefix="tiles"%>
2、<tiles:insertAttribute name=""/> 這個語法就類似inculde,等等跟tiles的設定一起看會比較清楚
接下來要配置tiles的設定檔
在WEB-INF底下新增一個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="leather.base" template="/tiles/leather_base.jsp">
<put-attribute name="leather_header" value="/tiles/header_tpl.jsp" />
<put-attribute name="leather_main" value="/leather/index.jsp" />
<put-attribute name="leather_footer" value="/tiles/footer_tpl.jsp" />
</definition>
</tiles-definitions>
在這邊請看一下put-attribute的name會跟jsp那邊的insertAttribute name對應到
也就是說<tiles:insertAttribute name="leather_header"/>這一段會把/tiles/header_tpl.jsp的內容inculde進來
再來就是struts2的部分了
若要在struts2中用到tiles有兩種方法
1、繼承tiles-default
<package name="default" extends="tiles-default">
</package>
2、加入reslut-type
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
討厭鬼是用2配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="default" extends="struts-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
</package>
<package name="leather" extends="default" namespace="/leather">
<action name="index" class="nerdy.action.LeatherAction" method="index">
<result name="success" type="tiles">leather.base</result>
</action>
</package>
</struts>
在result的部分type為tiles時就會去套用到tiles
leather.base是你在tiles.xml中的對應到 definition name="leather.base"的/tiles/leather_base.jsp這個版面
配置到這邊基本上是好了
大家有沒有發現如果result type=tiles 時若為leather.base
是只會回傳同一個畫面的
如果要不同畫面是要在tiles.xml中配置多個definition
大家可能會覺得很麻煩~不過我覺得很好用....
總比sitemesh在修改時要去想url的路徑
tiles一個對一個好找多了~
備註
這篇的這個備註很重要為了讓tiles.xml看起來不會這麼煩!!!!!!!
討厭鬼在tiles.xml中的配置
<definition name="leather.base" template="/tiles/leather_base.jsp">
<put-attribute name="leather_header" value="/tiles/header_tpl.jsp" />
<put-attribute name="leather_main" value="/leather/index.jsp" />
<put-attribute name="leather_footer" value="/tiles/footer_tpl.jsp" />
</definition>
在leather_header與leather_footer是固定不變的
會變的只有leather_main
有可能今天是進首頁所以是index.jsp
如果是文章頁就會變成article.jsp
當然還是要宣告多個
不過可以改成下列的繼承方式少打一些字
<definition name="leather.base" template="/tiles/leather_base.jsp">
<put-attribute name="leather_header" value="/tiles/header_tpl.jsp" />
<put-attribute name="leather_main" value="" />
<put-attribute name="leather_footer" value="/tiles/footer_tpl.jsp" />
</definition>
<definition name="leather.index" extends="leather.base">
<put-attribute name="leather_main" value="/leather/index.jsp" />
</definition>
<definition name="leather.article" extends="leather.base">
<put-attribute name="leather_main" value="/leather/article.jsp" />
</definition>
我的心得報告
如果你的css版面跟程式都是自己來的話或者版面變化不多時~用什麼都無所謂
但如果版面變化多而且是版面是由美編做的話
請用慎選你的套版工具~你永遠都不會知道美編什麼時候會在背後捅你一刀的