Strusts 之 tiles的使用

 

       最近,为了学习掌握geoserver源代码(他运用的是struts、spring等),翻阅了一下struts相关技术资料,整理一下拿出来。

在Tiles中,您可以使用XML或是JSP來管理版面配置的相關資源,這邊先介紹使用XML定義檔的方式,如之前主題所定義的,我們的定義檔是tiles-defs.xml,我們在當中如下撰寫:

代碼:
<?xml version="1.0" encoding="ISO-8859-1" ?>
                                                                               
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>

    <definition name=".myLayout" path="/tiles/myLayout.jsp">
        <put name="title"  value="Sample Page Title" />
        <put name="header" value="/tiles/header.jsp" />
        <put name="menu"   value="/tiles/menu.jsp" />
        <put name="footer" value="/tiles/footer.jsp" />
        <put name="body"   value="/tiles/body.jsp" />
    </definition>
                                                                               
</tiles-definitions>


在<definition>標籤中,我們指定了版面配置的JSP頁面,也就是path屬性所指定的myLayout.jsp,name屬性表明這個版面配置的名稱,而在接下來的<put>標籤中,我們指定了內容頁面的名稱與JSP頁面實際的位置。

Tiles的定義檔可以支援國際化,您可以複製以上的內容,撰寫在tiles-defs_zh.xml中,並將encoding改為big5,就可以在定義檔中使用中文,例如:
代碼:
<?xml version="1.0" encoding="big5" ?>
                                                                               
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>

    <definition name=".myLayout" path="/tiles/myLayout.jsp">
        <put name="title"  value="Tiles範例" />
        <put name="header" value="/tiles/header.jsp" />
        <put name="menu"   value="/tiles/menu.jsp" />
        <put name="footer" value="/tiles/footer.jsp" />
        <put name="body"   value="/tiles/body.jsp" />
    </definition>
                                                                               
</tiles-definitions>


其中myLayout.jsp的內容如下:
代碼:
<%@taglib prefix="tiles" uri="/tags/struts-tiles"%>
<html>
<head><title><tiles:getAsString name="title"/></title></head>
<body>
                                                                               
<table border="0" width="100%" cellspacing="5">
<tr>
    <td colspan="2"><tiles:insert attribute="header"/></td>
<tr>
<tr>
    <td width="140" valign="top"><tiles:insert attribute="menu"/></td>
    <td valign="top" align="left"><tiles:insert attribute="body"/></td>
</tr>
<tr>
    <td colspan="2"><tiles:insert attribute="footer"/></td>
</tr>
</table>
                                                                               
</body>
</html>


這個版面配置網頁中主要使用表格來切割版面,Tiles標籤可以從attribute屬性得知對應於XML定義檔的真正JSP頁面,例如header將被實際取代為header.jsp的內容,您可以自行完成其它的JSP頁面內容。

接下我們可以開始使用定義好的版面配置,例如在welcome.jsp中如下撰寫:
代碼:
<%@page contentType="text/html; charset=big5"%>
<%@taglib prefix="tiles" uri="/tags/struts-tiles"%>
<tiles:insert definition=".myLayout" flush="true"/>


我們在<tiles:insert>標籤中指定我們將使用.myLayout的版面配置定義,如果您連上welcome.jsp,則實際上您會看到以下的內容:
代碼:
<html>
<head><title>Tiles範例</title></head>
<body>

<table border="0" width="100%" cellspacing="5">
<tr>
    <td colspan="2">
<center><h1>Tiles測試範例<h1>
</td>
<tr>
<tr>
    <td width="140" valign="top">
選單一<br>
選單二<br>
選單三<br>
</td>
    <td valign="top" align="left">
Tiles提供一個類似於視窗程式版面管理的機制,透過定義檔,您可以定義版面配置,以及當中所要置入的內容網頁,內容與版面配置的標籤可以分離,您可以隨時抽換每一個內容網頁,也可以重用每一個版面配置。
</td>
</tr>
<tr>
    <td colspan="2">
<center>版權所有(c) http://www.caterpillar.onlyfun.net/phpBB2/
</td>
</tr>
</table>

</body>
</html>


如果您將來要改變版面配置的方式,您可以直接修改tiles-defs.xml中path所指向的Layout頁面,就如同您在視窗程式中改變版面管理員一樣,如果您要修改指向的內容網頁,也只要更改tiles-defs.xml中相對應的設定,所有的更改集中於Tiles設定檔中加以管理,達到將版面配置與內容分離的目的。

您可以擴充某個定義,重新定義當中所管理的頁面資源,一個例子如下:
代碼:
<?xml version="1.0" encoding="big5" ?>
                                                                               
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions>

    <definition name=".myLayout" path="/tiles/myLayout.jsp">
        <put name="title"  value="Tiles範例" />
        <put name="header" value="/tiles/header.jsp" />
        <put name="menu"   value="/tiles/menu.jsp" />
        <put name="footer" value="/tiles/footer.jsp" />
        <put name="body"   value="/tiles/body.jsp" />
    </definition>

    <definition name=".myLayout2" extends=".myLayout">
        <put name="title"  value="Tiles範例二" />
        <put name="header" value="/tiles/header2.jsp" />
    </definition>                                                                               
</tiles-definitions>


在上面的定義中,.myLayout2擴充自.myLayout,並重新定義了title與header兩個屬性,其它未重新定義的屬性將直接繼承自.myLayout。 
 

你可能感兴趣的:(apache,jsp,xml,struts,配置管理)