`
150531932
  • 浏览: 21936 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

decorator标签之说三道四

阅读更多
   最近维护一个项目,因为这个项目我没作开发,所以需要先熟悉项目的框架和业务,昨天被一个问题给整懵了,我不管怎么看都弄不明白那个链接怎么跳过去的.因为那个链接地址跟实际看到的页面不一样.链接地址的页面只是实际看到页面的一小部分,反反复复盯着那个请求名,然后到struts.xml文件中去找实际的跳转页面,反复查了几遍确定没问题,但看到的页面的确跟struts.xml里面写的path不一样.
   后来在项目中发现有个decorators.xml配置文件,google之,这才明白是它在作怪!
   最近项目也比较清闲,所以把这个贴出来给大家看看:).
    要使用decorator标签需要下载sitemesh.jar包.
decorator标签可以轻松解决页面布局的问题,轻松是因为相比<include>标签(需要在每个页面都用他引入JSP)而言,decorator标签的使用很简便,只需要在配置文件decorators.xml进行相应的配置再加上一个装饰器(其实就是一个JSP页面)即可.
decorators.xml
<decorators defaultdir="/decorators">
<excludes>
<pattern>/shared/*</pattern>
</excludes>
<decorator name="style" page="style.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>

<excludes> 标签代表不对定义的请求名进行装饰
<decorator> 标签代表对定义的请求名进行相应的装饰
现在我门需要定义一个style.jsp文件,官方是称之为装饰器,俺觉得称他是模版文件更贴切
style.jsp

<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
  <head>
    <title><decorator:title default="装饰器页面..." /></title>
    <decorator:head />
  </head>
  <body>
    <p><font color="red">this is style's header</font></p>
    <hr>
    <decorator:body />
    <hr>
    <p><font color="red">this is style's footer</font></p>
  </body>
</html>
需要注意的是style.jsp需要放在 根目录/decorators目录下面,当然decorators目录是需要自己建的.
在这个JSP里面,我们要用到decorator标签了,注意在用之前别忘了定义标签:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>

至于<decorator:title>,<decorator:head />,<decorator:body />的作用,后面再说!
然后要作的就是准备好我们访问的页面
index.jsp:

<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<title>decorator-index.jsp</title>
</head>
<body>
this is index.jsp. it's a simple page.
</body>
</html>
把这个页面放在 根目录下和 根目录/shared目录下面一份
现在把应用运行起来
访问:
http://localhost:8080/testDecorator/index.jsp
http://localhost:8080/testDecorator/shared/index.jsp
看看两个页面有什么不一样的?
没错,第一个链接看到的页面还包含style.jsp的东东.

而第二个链接却没有,是因为在decorators.xml文件在把这类的请求给过滤了.

现在明白<decorator:title>,<decorator:head />,<decorator:body />的作用了吗?
没错,他们依次负责输出用户所访问的页面中title,head,body标签之间的内容(不包含<title>,<head>,<body>标签).
decorator标签还有一些属性和用法,在这就不赘述了,大家自己研究吧






分享到:
评论

相关推荐

    设计模式之 Decorator模式和代码实现

    【Decorator模式】是一种设计模式,它允许在运行时动态地给对象添加新的责任或功能,而不必通过子类化的方式。在上述的奇幻RPG游戏中,Decorator模式被用来实现武器的锻造过程,尤其是武器镶嵌宝石的功能。这个过程...

    java Decorator装饰模式例子

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它允许在运行时给对象添加新的行为或职责,而无需改变对象的类。在Java中,装饰模式通常通过继承和组合来实现,使得代码具有更好的扩展性和灵活性。...

    decorator-4.1.2.rar ,亲测可用

    《Python装饰器深入解析——基于decorator-4.1.2版本》 在Python编程语言中,装饰器(Decorator)是一种强大的工具,它允许我们修改或增强函数、类或其他可调用对象的行为,而无需改动它们的源代码。在本文中,我们...

    decorator-4.1.2.tar.gz

    装饰器的使用可以使代码更加简洁、可读和可维护,这也是Python社区鼓励的编程实践之一。 总之,`decorator-4.1.2.tar.gz`是针对IPython环境的一个装饰器库,提供了优雅的装饰器实现,帮助开发者更好地扩展和管理...

    decorator python(decorator-3.4.0.tar.gz).rar

    这个"decorator python"模块是版本3.4.0的实现,其核心概念是通过函数来包装(即装饰)其他函数,以增强被装饰函数的行为。这个模块可能是由社区成员贡献并分享的,因此它属于"其他资源"类别。 在Python中,装饰器...

    C++ Decorator模式

    Decorator模式是设计模式中的一种结构型模式,它允许在运行时动态地给对象添加新的行为或职责,而不会破坏封装性。这种模式的核心思想是通过装饰类包装原对象,实现对原对象功能的扩展,同时保持与原接口的一致性。 ...

    设计模式之Decorator

    博文链接:https://your.iteye.com/blog/133420

    decorator-wechat,微信现代化(Nevolution decorator).zip

    decorator-wechat,微信现代化(Nevolution decorator).zip

    Decorator-3.4.0

    "Decorator-3.4.0" 是一个Python装饰器库的版本,提供了方便和灵活的方式来创建装饰器。这个版本的压缩包文件名为"decorator-3.4.0.tar.gz",它是一个常见的归档格式,用于存储和分发源代码。 在Python中,装饰器...

    PyPI 官网下载 | protocol_implements_decorator-0.3.1.tar.gz

    标签包括"zookeeper"、"分布式"、"云原生"和"cloud native"以及"Python库",这些标签揭示了该库可能涉及的领域和用途。`zookeeper`通常指的是Apache ZooKeeper,一个分布式协调服务;"分布式"表明这个库可能用于处理...

    java_Decorator.rar_decorator_decorator java

    *Decorator 常被翻译成"装饰",我觉得翻译成"油漆工"更形象点,油漆工(decorator)是用来刷油漆的,那么被刷油漆的对象我们称decoratee.这两种实体在Decorator 模式中是必须的。

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    timeout_decorator.py

    windows系统下的python超时装饰器,解决pypi中timeout-decorator库在windows系统上不可用的问题。

    装饰器模式[Decorator]

    装饰器模式的核心思想是通过将一个类包装在一个与之具有相同接口的类中来扩展其功能。这样做的好处是,它保持了原始类的接口不变,不会破坏类的封装性,同时也避免了使用继承带来的类膨胀问题。装饰器模式可以动态地...

    WPF 装饰器Decorator 和 Adorner综合实例

    在Windows Presentation Foundation (WPF) 中,装饰器(Decorator)和adorner是两种非常重要的UI元素,它们可以用于增强和扩展WPF控件的功能和视觉表现。本文将深入探讨这两种技术,并通过具体实例来阐述其在实际开发...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许动态地给一个对象添加新的功能,而无需修改其原有代码。这个模式的核心思想是通过将对象封装在一个包装器(Decorator)中来扩展其行为,而包装器和原始...

    vue脚手架,vue3 组件 vue-property-decorator 组件

    `vue-property-decorator`是一个库,它是Vue.js和TypeScript的结合,提供了装饰器来帮助我们在TypeScript中更好地声明和管理组件的属性。它使得我们可以利用TypeScript的强类型系统,提高代码的可维护性和可读性。...

    mybatis3+springmvc4+angularjs+mysql+decorator实例

    这是一个整合了多个技术框架的项目实例,主要涵盖了MyBatis3、SpringMVC4、AngularJS、MySQL数据库以及Decorator模式的应用。以下是对这些技术及其在项目中的应用进行的详细解释: 1. MyBatis3:MyBatis是一个优秀...

    前端开源库-pure-render-decorator

    `pure-render-decorator`是一个非常有用的开源库,它专门设计用于提升React组件的性能,通过确保只在必要时进行渲染,从而降低不必要的DOM操作。这个库的核心理念是实现“纯渲染”,也就是当组件的props或state没有...

Global site tag (gtag.js) - Google Analytics