一说明
Struts以后增加了Tiles包使得struts在页面的处理方面多了一种选择并且更容易实现代码的重用Tiles中对页面的划分有点象jakarta的另外一个项目Turbine中的TDK增加了layout的概念其实就是把一个页面划分为几块通常的来说一个页面大概可以划分为如下几块head页面头部:存放一个运用的公共信息logo等如果是网站可能是最上面的一nu页面菜单:放置一个运用中需要使用的菜单或者在每一个页面都使用的连接footer页面尾部:如版权信息等body页面主题内容:每个页面相对独立的内容如果按上面的划分那对每一个页面我们只要写body里面的内容其他的就可以共享重用如果大多数页面的布局基本相同我们甚至可以使用一个jsp文件根据不同的参数调用不同的body
二Tiles配置和基本配置文件介绍
Tiles有一个配置文件:tilesdefsxml
tilesdefsxml定义了每一个页面的组成元素和形式
下面我将说明如下所示的一个tilesdefsxml文件
tilesdefsxml
<tilesdefinitions>
<!定义/layouts/classicLayoutjsp的组成名称为sitemainLayout>
<!后面将附/layouts/classicLayoutjsp的内容>
<definition name=sitemainLayout path=/layouts/classicLayoutjsp>
<put name=title value=Tiles Blank Site />
<put name=header value=/tiles/common/headerjsp />
<put name=menu value=nubar />
<!menu的组成为nubar对应的页面>
<put name=footer value=/tiles/common/footerjsp />
<put name=body value=/tiles/bodyjsp />
</definition>
<!定义siteindexpage继承sitemainLayout>
<definition name=siteindexpage extends=sitemainLayout >
<put name=title value=Tiles Blank Site Index />
<put name=body value=/tiles/bodyjsp />
<!以上两个元素将替换sitemainLayout中的元素>
</definition>
<definition name=nubar path=/layouts/vboxLayoutjsp >
<putList name=list >
<add value=nulinks />
<add value=nudocumentation />
</putList>
</definition>
</tilesdefinitions>
附/layouts/classicLayoutjsp
<html>
<head>
<title><tiles:getAsString name=title/>
</title>
</head>
<body bgcolor=#ffffff text=# link=# alink=# vlink=#>
<table border= width=% cellspacing=>
<tr>
<td colspan=><tiles:insert attribute=header /></td>
</tr>
<tr>
<td width= valign=top>
<tiles:insert attribute=menu/>
</td>
<td valign=top align=left>
<tiles:insert attribute=body />
</td>
</tr>
<tr>
<td colspan=>
<tiles:insert attribute=footer />
</td>
</tr>
</table>
</body>
</html>
在webxml里面配置tiles配置完后对应struts action servlet的配置如下:
webxml
<! Action Servlet Configuration >
<servlet>
<servletname>action</servletname>
<! Specify servlet class to use:
Strutsx: ActionComponentServlet
Struts: ActionServlet
no Struts: TilesServlet
>
<servletclass>orgapachestrutsactionActionServlet</servletclass>
<! Tiles Servlet parameter
Specify configuration file names There can be several comma
separated file names
>
<initparam>
<paramname>definitionsconfig</paramname>
<paramvalue>/WEBINF/tilesdefsxml</paramvalue>
</initparam>
<! Tiles Servlet parameter
Specify Tiles debug level
O : no debug information
: debug information
: more debug information
>
<initparam>
<paramname>definitionsdebug</paramname>
<paramvalue></paramvalue>
</initparam>
<! Tiles Servlet parameter
Specify Digester debug level This value is passed to Digester
O : no debug information
: debug information
: more debug information
>
<initparam>
<paramname>definitionsparserdetails</paramname>
<paramvalue></paramvalue>
</initparam>
<! Tiles Servlet parameter
Specify if xml parser should validate the Tiles configuration file
true : validate DTD should be specified in file header
false : no validation
>
<initparam>
<paramname>definitionsparservalidate</paramname>
<paramvalue>true</paramvalue>
</initparam>
<! Struts configuration if Struts is used >
<initparam>
<paramname>config</paramname>
<paramvalue>/WEBINF/strutsconfigxml</paramvalue>
</initparam>
<initparam>
<paramname>validate</paramname>
<paramvalue>true</paramvalue>
</initparam>
<initparam>
<paramname>debug</paramname>
<paramvalue></paramvalue>
</initparam>
<initparam>
<paramname>detail</paramname>
<paramvalue></paramvalue>
</initparam>
<loadonstartup></loadonstartup>
</servlet>
三使用Tiles
如果已经配置好tielsdefsxml接下来就可以在jsp文件中使用这些定义了
有如下的方式使用tiles
:
<tiles:insert definition=sitemainLayout flush=true />
插入sitemainLayout标记的一页
<tiles:insert template=/tutorial/basic/myFramesetLayoutjsp >
<tiles:put name=title content=My first frameset page direct=true />
<tiles:put name=header content=/tutorial/common/headerjsp direct=true/>
<tiles:put name=footer content=/tutorial/common/footerjsp direct=true/>
<tiles:put name=menu content=/tutorial/basic/menujsp direct=true/>
<tiles:put name=body content=/tutorial/basic/helloBodyjsp direct=true/>
</tiles:insert>
/tutorial/basic/myFramesetLayoutjsp
<html>
<head>
<title><tiles:get name=title/></title>
</head>
<frameset rows= * >
<frame src=<%=requestgetContextPath()%><tiles:get name=header /> name=header >
<frame src=<%=requestgetContextPath()%><tiles:get name=body /> name=body >
<frame src=<%=requestgetContextPath()%><tiles:get name=footer /> name=footer >
</frameset>
</html>
插入/tutorial/basic/myFramesetLayoutjsp
并把title的值设定为:My first frameset page
header设定为/tutorial/common/headerjsp
四后记
Tiles的使用在他的文档里面写的比较详细以上是一些简单和基本的使用具体的文档可以看Struts里面的一个tilesdocumentationwar的包但即使是这个包也不是很全可以通过上的的连接到作者的主页上去找个人觉得使用Tiles在做企业运用的时候可能不如在做网站那样更能体现优越性但在系统开始设计的时候考虑并规划好整个UI那在修改和维护的时候将节省不少的工作量因为通常UI的确定在代码编写结束和完成所有尽可能的使用多个子页面构成一个页面后面的美化和维护就比直接维护一个很大的页面容易