总结一下用Sitemesh做网页布局的经验

    前一段时间需要用到Sitemesh做网页的布局,于是查找资料学习了一下,查到的都是入门学习一类简单的静态页面整合,而且几乎都一样。但还好在某个角落里找到了一点有用的东西,是对于sitemesh标签的介绍,不过...我忘记地址了- -#

    先说下我的需求:一个页面分为上下两部分,一个通顶,和下面的查询列表显示,通顶和列表显示都是动态的。

补述:之前用的是frame框架,但是样式上很不协调,下半部会出现滚动条,于是选择采用sitemesh;查找到的资料都是为页面添加静态修饰,而没有一个添加动态修饰的例子。

    准备工作:

    1、先下载sitemesh。地址:http://www.opensymphony.com/sitemesh/download.action

目前最新的版本是2.4.1   

    2、将sitemesh-2.4.1.jar拷贝到WEB-INF/lib下

    3、在web.xml中配置SiteMeshFilter:

<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>*</url-pattern>
  </filter-mapping>
 

 

    4、建立装饰器页面在/decorators文件夹下  #:这里我建立了两个装饰器页面,一个作为主装饰器,一个作为通顶的装饰器。

    panel.jsp //动态通顶的装饰器

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<!--动态通顶只需要显示它的内容就可以,所以只取它的body内容部分-->
<decorator:body />
 

    main.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/page" prefix="page" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <!-- 取被装饰页面的head及title内容-->
        <decorator:head />
        <title><decorator:title default="配置默认的title"/></title>    
    </head>
    <body>
     <!--body部分,取被panel.jsp装饰的页面,及被main.jsp装饰的页面的body内容-->
        <page:applyDecorator page="getfields.do" name="panel"/>
     <!-- page属性代表修饰的路径,这里可以是一个.do,实现动态内容的页面整合,name属性设置为装饰器的名字-->
        <decorator:body />
    </body>
</html>
 

    5、建立WEB-INF/decorators.xml描述装饰页面:

 

<?xml version="1.0" encoding="gb2312"?>

<!-- 配置装饰器所在路径 -->
<decorators defaultdir="/decorators">
<!-- 主装饰器 -->  
<decorator name="main" page="main.jsp"/>
<!-- 动态通顶装饰器 -->  
<decorator name="panel" page="panel.jsp"/>

</decorators>

    在一般情况下,如果你的所有页面都需要被装饰,那么可以写成

 

<decorators defaultdir="/decorators">
       <decorator name="main" page="main.jsp">
           <pattern>*</pattern>
       <!-- pattern配置需要被装饰的页面路径-->
       </decorator>
</decorators>

    而我只需要部分页面被修饰,如果没有配pattern,sitemesh在过滤页面的时候貌似会检查页面的某个属性:即

<!-- 作用是使该页面被main装饰器装饰-->
<meta name="decorator" content="main"/>

   如果存在,则根据content属性的值,为该页面匹配装饰器。所以只要在需要被装饰的页面的head中添加

<meta name="decorator" content="main"/>

    就可以自动被装饰了,个人认为还是这种方法比较方便灵活。

    由于被装饰的是一个.do的动态路径,没法给出例子,不过已成功用在项目中。

 

                                                                          有问题欢迎留言讨论,转载请注明----

你可能感兴趣的:(Web,jsp,xml,框架,XHTML)