應(yīng)用Struts的網(wǎng)站建設(shè)(6)
經(jīng)過對(duì)tiles的研究,大概了解它能夠完成什么了,所以,在這個(gè)任務(wù)里我們將實(shí)現(xiàn)tiles的功能以滿足我們的使用。 由于上一個(gè)任務(wù)所花費(fèi)的時(shí)間,在這個(gè)任務(wù)里可以節(jié)約一部分時(shí)間,所以估計(jì)仍然為6小時(shí)。
Engineering Task Card
Date: 2003-4-11___
Story #:_實(shí)現(xiàn)Tiles的多數(shù)功能___ Software Eng: _紫龍____ Task Estimate: __6小時(shí)___
Task Description:
1、實(shí)現(xiàn)動(dòng)態(tài)模板功能 2、實(shí)現(xiàn)模板的國(guó)際化功能 3、用戶可以在運(yùn)行時(shí)選擇模板 4、記錄全過程
Software Engineer’s Notes
Task Tracking:
Date |
Done |
to do |
use time |
Comments |
2003-04-11 |
|
|
|
|
2003-04-12 |
1,2,3,4 |
|
6:52 |
|
|
|
|
|
|
|
要實(shí)現(xiàn)動(dòng)態(tài)模板,則需要一些程序了。我們把example的程序放入我們的project里面,然后進(jìn)行相應(yīng)的設(shè)置。把包命名為org.apache.struts.tiles.skin,同時(shí)修改程序的一部分以適應(yīng)我們的需要。然后修改tiles-defs.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta./struts/dtds/tiles-config_1_1.dtd">
<tiles-definitions> <definition name="tiles.root" path="/controller/layoutSwitch.do"> <put name="userSettingsName" value="tiles.skin.user.settings" /> <put name="catalogSettings" value="available.skins" /> <put name="layout.attribute" value="page.layout" /> <put name="title" value="title need to be updated(from root)" /> <put name="header" value="/pages/head.jsp"/> <put name="footer" value="/pages/foot.jsp"/> <put name="menu" value="tiles.menu.bar" /> </definition>
<!-- Menu bar definition --> <!-- Some definition come from other definition files (ex : doc.menu.*) --> <definition name="menu.root" path="/layouts/menu.jsp" > </definition> <definition name="tiles.menu.bar" path="/layouts/vboxLayout.jsp" > <putList name="list" > <add value="menu.links" /> <add value="menu.settings" /> <!--<add value="menu.userMenu" />
<add value="menu.admin" />--> </putList> </definition> <!-- main menu definition --> <definition name="menu.links" extends="menu.root" > <put name="title" value="Links" /> <putList name="items" > <item value="Home" link="/index.jsp" /> </putList> </definition> <!-- Preferences menu definition --> <definition name="menu.settings" extends="menu.root" > <put name="title" value="Preferences" /> <putList name="items" > <item value="my Layout Settings" link="/control/SkinSettings.do" /> </putList> </definition>
<!-- Skin main page --> <definition name="skin.settings.page" extends="tiles.root"> <put name="title" value="Skin Setting" /> <put name="body" value="skin.settings.body"/> </definition> <!-- Skin body declaration--> <definition name="skin.settings.body" path="/skinsetting/skinSettings.jsp" controllerUrl="/controller/SkinSettings.do" > <put name="userSettingsName" value="tiles.skin.user.settings" /> <put name="catalogSettings" value="available.skins" /> </definition> <!-- Available skins --> <definition name="available.skins" > <putList name="skin.list" > <add value="default.skin" /> <add value="menuright.skin" /> </putList> </definition>
<!-- Default skin values --> <definition name="default.skin" > <put name="skin.label" value="Default" /> <put name="page.layout" value="/layouts/classicLayout.jsp" /> <put name="menu.layout" value="/layouts/menu.jsp" /> <put name="menuBar.layout" value="/layouts/vboxLayout.jsp" /> </definition>
<!-- Default skin values --> <definition name="menuright.skin" extends="default.skin" > <put name="skin.label" value="Right Menu" /> <put name="page.layout" value="/layouts/skin1/menuLeftLayout.jsp" /> <put name="menu.layout" value="/layouts/menu.jsp" /> </definition> </tiles-definitions>
|
建立一系列的菜單和模板頁面。修改struts-config.xml,加入以下內(nèi)容
<!-- ======================================================= --> <!-- ACL Controls --> <!-- ======================================================= --> <action path = "/login" type = "com.ewuxi.champion.struts.actions.LoginAction" name = "loginForm" scope = "request" validate = "true" input = "/index.jsp">
<forward name="success" path="/aclController.do?fwd=users" /> <forward name="failure" path="index.jsp" /> </action> <!-- ======================================================= --> <!-- Tiles 1.1 Skin Settings --> <!-- ======================================================= --> <action path="/controller/layoutSwitch" type="org.apache.struts.tiles.skin.LayoutSwitchAction" /> <action path="/control/SkinSettings" type="org.apache.struts.tiles.actions.NoOpAction" name="SkinSettingsForm" > <forward name="success" path="skin.settings.page"/> </action> <action path="/controller/SkinSettings" type="org.apache.struts.tiles.skin.LayoutSettingsAction" name="SkinSettingsForm" /> </action-mappings>
|
然后建立layout目錄,并放入相應(yīng)的文件,建立pages目錄,建立相應(yīng)的文件。通過以上的設(shè)置,我們實(shí)現(xiàn)了動(dòng)態(tài)更換模板并建立了第一個(gè)登錄頁面。
其結(jié)果如下:默認(rèn)的登錄頁面
 默認(rèn)的皮膚頁面設(shè)置

第二種狀態(tài),即菜單在右邊的狀態(tài)

菜單在右的主頁面

總結(jié):通過對(duì)Tiles應(yīng)用的深入研究,我們實(shí)現(xiàn)在動(dòng)態(tài)更改皮膚的功能,并且也實(shí)現(xiàn)了皮膚的國(guó)際化功能(其實(shí)現(xiàn)原理與前述的國(guó)際化原理一樣)。這樣我們達(dá)到了本任務(wù)的要求。統(tǒng)計(jì)一下時(shí)間是6小時(shí)52分。超過統(tǒng)計(jì)約一個(gè)小時(shí),其中的主要原因是原來example中有一個(gè)bug,即更改的皮膚必須要按刷新按鈕才能實(shí)現(xiàn),大約花了一個(gè)多小時(shí)來查出這個(gè)bug,并修正了這個(gè)bug。通過上面的配置內(nèi)容可見,模板的可繼承以及嵌套的功能給我們的設(shè)計(jì)帶來了極大的方便。同時(shí)menu的設(shè)計(jì)也帶來很多益處。當(dāng)然,我們還沒有實(shí)現(xiàn)跟據(jù)用戶的設(shè)置來實(shí)現(xiàn)每次進(jìn)入的時(shí)候風(fēng)格相同。這將在下一個(gè)任務(wù)中實(shí)現(xiàn)。這個(gè)任務(wù)的源代碼如下下載
紫龍,于
10/11/2003 20:23:43
|