之前發了有關套版的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版面跟程式都是自己來的話或者版面變化不多時~用什麼都無所謂

但如果版面變化多而且是版面是由美編做的話

請用慎選你的套版工具~你永遠都不會知道美編什麼時候會在背後捅你一刀

arrow
arrow
    文章標籤
    struts2 tiles struts
    全站熱搜

    討厭鬼 發表在 痞客邦 留言(1) 人氣()