分享

蓝色天空(原创作品)

 larrin 2006-03-18

应用Struts的网站建设(6)

经过对tiles的研究,大概了解它能够完成什么了,所以,在这个任务里我们将实现tiles的功能以满足我们的使用。 由于上一个任务所花费的时间,在这个任务里可以节约一部分时间,所以估计仍然为6小时。

Engineering Task Card

Date: 2003-4-11___

Story #:_实现Tiles的多数功能___      Software Eng: _紫龙____ Task Estimate: __6小时___

Task Description:

    1、实现动态模板功能
     2、实现模板的国际化功能
     3、用户可以在运行时选择模板
     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  
         


要实现动态模板,则需要一些程序了。我们把example的程序放入我们的project里面,然后进行相应的设置。把包命名为org.apache.struts.tiles.skin,同时修改程序的一部分以适应我们的需要。然后修改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,加入以下内容

<!-- ======================================================= -->
<!-- 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目录,并放入相应的文件,建立pages目录,建立相应的文件。通过以上的设置,我们实现了动态更换模板并建立了第一个登录页面。

其结果如下:默认的登录页面


默认的皮肤页面设置

第二种状态,即菜单在右边的状态

菜单在右的主页面

总结:通过对Tiles应用的深入研究,我们实现在动态更改皮肤的功能,并且也实现了皮肤的国际化功能(其实现原理与前述的国际化原理一样)。这样我们达到了本任务的要求。统计一下时间是6小时52分。超过统计约一个小时,其中的主要原因是原来example中有一个bug,即更改的皮肤必须要按刷新按钮才能实现,大约花了一个多小时来查出这个bug,并修正了这个bug。通过上面的配置内容可见,模板的可继承以及嵌套的功能给我们的设计带来了极大的方便。同时menu的设计也带来很多益处。当然,我们还没有实现跟据用户的设置来实现每次进入的时候风格相同。这将在下一个任务中实现。这个任务的源代码如下下载

 

 

紫龙,于 10/11/2003 20:23:43


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多