Sung in Blog

           一些技术文章 & 一些生活杂碎
 

Struts Tiles 的使用

l         配置准备

Struts1.1开始,Tiles的使用发生了一些改变,主要是配置方面的,tiles的安装必备的元素有:

 struts.jar – in WEB-INF/lib/. Tiles are now in the main Struts distribution.

 tiles.tld – in WEB-INF/

 all commons-*.jar files needed by Struts – in WEB-INF/lib/

  准备好resin的配置环境,把文件resin\conf\resin.conf作相应调整,增加一个测试的Web服务:

<web-app id="/templateDemo">

                            <classpath id="../../props"/>

                            <classpath id="../../classes" source="../../src" compile="false"/>

                            <classpath id="../../lib" library-dir="true"/>

                            <session-config>

                                   <session-max>4096</session-max>

                                   <session-timeout>30</session-timeout>

                                   <enable-cookies>true</enable-cookies>

                                   <enable-url-rewriting>true</enable-url-rewriting>

                            </session-config>

                     </web-app>

l         准备知识:template

template:模版;

静态页面主要的模版技术,通过Template的使用可以的减少相应的一些重复的布局工作,并且大量的页面调整在使用模版后容易的多。

l         定义模版

OK,下面来准备我们的模版文件:

Common\chapterTemplate.jsp:

<%@ taglib uri='/WEB-INF/struts-template.tld' prefix='template' %>

<html>

<head>

<title><template:get name='title'/></title>

<body background='../../img/menu_bg.gif'>

<br>

<table>

   <tr valign='top'>

      <td><template:get name='sidebar'/></td>

      <td><table>

            <tr><td><template:get name='header'/></td></tr>

                     <tr><td><template:get name='menubar'/></td></tr>

            <tr><td><template:get name='content'/></td></tr>

            <tr><td><template:get name='footer'/></td></tr>

          </table>

      </td>

   </tr>

</table>

</body>

</html>

在上面的文件中,我们定义了几个页面的元素:sidebar(导航栏)menubar(菜单栏)、content(内容)、footer(页脚),有意思的是,元素的命名很灵活,可以根据自己的爱好来进行命名的规则,只要在模版的引用时注意命名相同即可。在这个页面同时使用Strutstemplate标签:

<%@ taglib uri='/WEB-INF/struts-template.tld' prefix='template' %>

<template:get name='content'/>是往页面中定义一个模版元素。

l         使用模版

模版的使用很简单,但相对tiles来说要机械些,我们在index.jsp中来引用刚才定义的模版:

Index.jsp:

<template:insert template='/common/chapterTemplate.jsp'>

  <template:put name='title' content=''title' ' direct='true'/>

  <template:put name='header' content='/common/header.htm' />

  <template:put name='menubar' content='/common/header.htm'/>

  <template:put name='sidebar' content='/common/sidebar.htm' />

  <template:put name='content' content='/common/content.htm'/>

  <template:put name='footer' content='/common/footer.htm' />

</template:insert>

引用模版页面:

<template:insert template='/common/chapterTemplate.jsp'>

向相应的模版元素插入对应的页面:

<template:put name='content' content='/common/content.htm'/>

这样的话,我们就把刚刚在模版中定义的元素和物理的页面文件联系起来了 :)

header.htmsidebar.htmcontent.htm……的文件自己写几个简单的应付应付吧)

看看index.jsp的效果吧:

l         tiles的开始

tils的使用就比template要繁琐些了,不过主要还是在配置方面的。Tiles增加了LayOut(布局)的概念,这使得页面的布局能够对象化(可继承)和可配置化(XML文件中定义的definition)

Tils的使用比较灵活,可以在Jsp中定义,也可以通过Struts的配置文件来使用,根据项目的规模,可以选择适合自己的方式。

l         定义Layout布局页面

Layout\classicLayout.jsp:

<%@ page language="java" %>

<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<html>

<head>

<title>

这是一个模版的TITILE!

</title>

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

<body bgcolor="#669966" text="#000000" link="#023264" alink="#023264" vlink="#023264">

<table width="100%" border="1" cellpadding="0" cellspacing="0">

  <tr>

    <td colspan="2"><tiles:insert attribute="header" /></td>

</tr>

<tr>

    <td width="140" valign="top"><tiles:insert attribute='sidebar'/> </td>

    <td valign="top" align="left"><tiles:insert attribute='content' /> </td>

</tr>

<tr>

    <td colspan="2"><tiles:insert attribute="footer" /> </td>

</tr>

</table>

</body>

</html>

首先设想好我们的页面基本格式是这样的:

HTML中用表格的方式来布局好我们的页面,然后在相应的单元格中插入tiles的元素:

这样,我们的布局文件就定义好了!

     WEB.xml的配置

WEB.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

  "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>

       <display-name>Struts Tiles Documentation</display-name>

       <!-- Action Servlet Configuration -->

       <servlet>

       <servlet-name>action</servlet-name>

       <!-- Specify servlet class to use:

       - Struts1.0.x: ActionComponentServlet

       - Struts1.1: ActionServlet

       - no Struts: TilesServlet

       -->

       <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

      

       <!-- Tiles Servlet parameter

       Specify configuration file names. There can be several comma

       separated file names

      

       <init-param>

       <param-name>definitions-config</param-name>

       <param-value>/WEB-INF/tiles-defs.xml</param-value>

       </init-param>

       -->

       <!-- Tiles Servlet parameter

       Specify Tiles debug level.

       O : no debug information

       1 : debug information

       2 : more debug information

       -->

       <init-param>

       <param-name>definitions-debug</param-name>

       <param-value>1</param-value>

       </init-param>

      

       <!-- Tiles Servlet parameter

       Specify Digester debug level. This value is passed to Digester

       O : no debug information

       1 : debug information

       2 : more debug information

       -->

       <init-param>

       <param-name>definitions-parser-details</param-name>

       <param-value>0</param-value>

       </init-param>

      

       <!-- 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

       -->

       <init-param>

       <param-name>definitions-parser-validate</param-name>

       <param-value>true</param-value>

       </init-param>

      

       <!-- Struts configuration, if Struts is used -->

       <init-param>

       <param-name>config</param-name>

       <param-value>/WEB-INF/struts-config.xml</param-value>

       </init-param>

       <init-param>

       <param-name>validate</param-name>

       <param-value>true</param-value>

       </init-param>

       <init-param>

       <param-name>debug</param-name>

       <param-value>2</param-value>

       </init-param>

       <init-param>

       <param-name>detail</param-name>

       <param-value>2</param-value>

       </init-param> 

       <load-on-startup>2</load-on-startup>

       </servlet>

  <!-- Action Servlet Mapping -->

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

  <!-- The Welcome File List -->

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  <!-- Struts Tag Library Descriptor -->

  <taglib>

    <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>

  </taglib>

 

  <!-- Template Tag Library Descriptor -->

  <taglib>

    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>

  </taglib>

</web-app>

struts1.0中,tiles的定义基本上在web.xml中进行配置的:

<init-param>

       <param-name>definitions-config</param-name>

       <param-value>/WEB-INF/tiles-defs.xml</param-value>

       </init-param>

但在Struts1.1以后,相应的配置被转移到了struts-config.xml文件去了。

l         struts-config.xml的配置

struts-config.xml:

<?xml version="1.0" encoding="ISO-8859-1" ?>

 

<!DOCTYPE struts-config PUBLIC

 "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"

 "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

 

<action-mappings>

  <!-- Language Selection Action -->

      

</action-mappings>

 <plug-in className="org.apache.struts.tiles.TilesPlugin" >

    <set-property property="definitions-config"

                        value="/WEB-INF/tiles-defs.xml" />

    <set-property property="moduleAware" value="true" />

  </plug-in>

 </struts-config>

在该文件中增加tiles插件的配置:

<plug-in className="org.apache.struts.tiles.TilesPlugin" >

    <set-property property="definitions-config"

                        value="/WEB-INF/tiles-defs.xml" />

    <set-property property="moduleAware" value="true" />

  </plug-in>

l         tiles-defs.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="test.action.test1" path="/layout/classicLayout.jsp" >

  <put name="header" value="/common/header.htm" />

  <put name="menubar"   value="/common/header.htm" />

  <put name="sidebar"   value="/common/sidebar.htm" />

  <put name="content"   value="/common/content.htm" />

  <put name="footer"   value="/common/footer.htm" />

</definition>

<definition name="portal.page" extends="test.action.test1">

<put name="sidebar" value="/common/footer.htm" />

<put name="body" value="portal.body" />

</definition>

</tiles-definitions>

tiles-defs.xmltiles中比较重要的一个配置文件,基本上对于layout的布局、和物理页面文件联系的配置都是在这个文件中进行的。那么在tiles中,definition是一个比较重要的概念,那么definition是什么一个东西呢?definition可以理解为是一组layout的集成,他是一个对象化的元件,可以拥有很多对象化的特性,如:继承、重载等,也可以理解为是一种layout的组件。基本上template的和tiles的区别也在于此,tiles通过definition的定义从而实现了layout的可配置化,并且definition是可继承的,这样的话就使得很多已经定义好的definition可以重用。因此有人说tiles使得页面的layout可以实现组件化了!

l         展现页面的引用

tailIndex.jsp:

<%@ page language="java" %>

<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

<tiles:insert definition="test.action.test1" flush="true" />

OK,让我们来看看效果吧:

posted on 2005-10-26 15:50 Sung 阅读(815) 评论(0)  编辑  收藏 所属分类: Struts

只有注册用户登录后才能发表评论。


网站导航: