Struts2的模板和主題theme及自定義theme

       Struts2提供了三種主題,ajax, simple, css_xhtml,xhtml,它默認的是xhtml主題,開發時我們一般都選simple。
因爲Struts2所有的UI標籤都是基於主題和模板的,主題和模板是Struts2所有UI標籤的核心。模板是一個UI標籤的外在表示形式,例如:當我們使用<s:select ... ... />標籤時,Struts2就會根據對應select模板來生成一個有模板特色的下拉列表框。如果爲所有的UI標籤都提供了對應的模板,那麼這系列的模板就形成了一個主題。

對於一個JSP頁面裏包含的UI標籤而言,即可以直接設置該UI標籤需要使用的模板,也可以設置該UI標籤使用的主題。實際上對開發者而言,並不推薦直接設置模板屬性,而是應該選擇特定主題。設置主題的方法有以下幾種:

1,通過設定特定UI標籤上的theme屬性來指定主題。

2,通過設定特定UI標籤外圍的Form標籤的theme屬性來指定主題。

3,通過取得page會話範圍內以theme爲名稱的屬性來確定主題。

4,通過取得request會話範圍內以theme爲名稱的屬性來確定主題。

5,通過取得session會話範圍內以theme爲名稱的屬性來確定主題。

6,通過取得application會話範圍內以theme爲名稱的屬性來確定主題。

7,通過取得名爲struts.ui.theme的常量(默認值是xhtml)來確定主題,該常量可以在struts.properties文件或者struts.xml文件中確定。如:

<constantname="struts.ui.theme" value="simple" />

上面介紹的幾種指定UI標籤主題的方式,它們的優先級也是按照上面的順序來的。

Struts2的模板目錄是通過struts.ui.templateDir常量來指定的,該常量的默認值是template,即意味着Struts2會從Web應用的template目錄,CLASSPATH(包括Web應用的WEB-INF\classes路徑和WEB-INF\lib路徑)的template目錄來依次加載特定模板文件。如果我們只使用一個select標籤,且指定主題爲xhtml,則加載模板文件的順序爲:

1,搜索Web應用裏/template/xhtml/select.ftl文件

2,搜索CLASSPATH路徑下的template/xhtml/select.ftl文件

Struts2的模板文件是.ftl文件,它是FreeMarker的模板文件。用戶也可以通過修改struts.ui.templateSuffix常量的值來改變Struts2默認的模板技術,該常量接受如下幾個值:

ftl:基於FreeMarker的模板技術

vm:基於Velocity的模板技術

jsp:基於JSP的模板技術

雖然Struts2允許使用自己的模板技術,但如果用戶選擇了使用Velicoty或JSP作爲模板技術,就要實現所有的模板和主題,這個是工作量很大的事情。

Struts2默認提供了4個主題:simple,xhtml,css_xhtml和ajax,這4個主題的模板文件放在Struts2的核心類庫裏(struts2-core.jar包)。

n?用戶也可以創建自己的主題
創建自定義的主題有如下3種方式:

1,開發者完全實現一個全新的主題,這種方式要求開發者爲每個UI標籤都提供自定義的模板文件,不推薦

2,包裝一個現有的主題,這種方式要求開發者爲每個UI組件都提供自定義主題的模板文件,即使自定義主題裏某個UI組件與原來主題裏UI組件的行爲完全一樣。也不推薦。

3,擴展一個現有的主題,這種方式開發者只需要提供自定義的模板文件,例子如下:

用戶自定義的主題是以xhtml主題爲基礎的,並且只想改變select UI標籤的行爲,則可以提供一個自己的select.ftl文件,並將該文件放在對應的主題目錄下。

select.ftl文件代碼如下:

<!--?加入自己的文字部分 -->

<h3>作者李:</h3>


<!--?包含xhtml主題下的controlheader.ftl模板 -->

<#include"/${parameters.templateDir}/xhtml/controlheader.ftl" />

<!--?包含simple主題下的select.ftl模板 -->

<#include"/${parameters.templateDir}/simple/select.ftl" />

<!--?包含xhtml主題下的controlfooter.ftl模板 -->

<#include"/${parameters.templateDir}/xhtml/controlfooter.ftl" />

將該文件放在Web應用的WEB-INF\classes\template\lee路徑下,這表明創建了一個自定義模板,該模板名爲lee。

除此之外,還必須在主題目錄下增加一個theme.properties文件,該文件指定自定義模板是以哪個模板爲基礎進行擴展的,文件內容爲:

parent=xhtml

#指定該主題以xhtml主題爲基礎進行擴展

該文件也放在WEB-INF\classes\template\lee路徑下,然後在JSP頁面中使用如下代碼就可調用此模板了:

<%--

* @author yeeku.H.lee [email protected]

* @version 1.0

* <br>Copyright (C), 2005-2008, yeeku.H.Lee

* <br>This program is protected by copyright laws.

* <br>Program Name:

* <br>Date:?

--%>

<%@ page contentType="text/html; charset=GBK"language="java"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<html>

<head>

<meta http-equiv="Content-Type"content="text/html; charset=GBK"/>

<title>使用自定義模板來生成下拉列表</title>

</head>

<body>

<s:select name="aa" theme="lee"?

list="{'Spring2.0' , 'J2EE' , 'Ajax'}" size="3"/>

</body>

</html>

Struts2提供的ajax主題就是以xhtml主題爲基礎進行擴展的。

Struts2的內建主題

Struts2內建了4個主題,分別是simple,xhtml,css_xhtml和ajax。

simple主題是最簡單的主題,它是最底層的結構,主要用於構建附加的功能或者行爲(例如在此主題基礎上進行擴展),使用simple主題時,每個UI標籤只生成一個簡單的HTML元素,不會生成其他額外的內容。

Struts2的xhtml, css_xhtml主題都是對simple主題的包裝和擴展。

xhtml主題是Struts2的默認主題,它對simple主題進行擴展,在該主題的基礎上增加了如下附加的特性:

1,針對HTML標籤(如textfield和select標籤)使用標準的兩列表格佈局。

2,每個HTML標籤的Label,即可以出現在HTML元素的左邊,也可以出現在上邊,這取決於labelposition屬性的設置。

3,自動輸出校驗錯誤信息。

4,輸出JavaScript的客戶端校驗。

css_xhtml主題則對原有的xhtml主題進行了擴展,在xhtml主題基礎上加入了CSS樣式控制。

ajax主題目對xhtml主題目進行了擴展,在xhtml主題上爲每個標籤提供了額外的Ajax支持。ajax主題的Ajax支持是以Dojo和DWR爲基礎的。ajax主題在xhtml主題基礎上增加了如下特性:

1,支持Ajax方式的客戶端校驗。

2,支持遠程表單的異步提交(最好和submit標籤一起使用)。

3,提供高級的div標籤,允許實現局部更新部分HTML的功能。

4,提供高級的a標籤,允許動態加載並執行遠端的javaScript代碼。

5,提供支持ajax的tabbedPanel。

6,提供"富客戶端"模型的pub-sub事件模型。

發佈了21 篇原創文章 · 獲贊 28 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章