`

【转】velocity的布局(集成在SpringMVC中)

阅读更多

 转http://qstar.iteye.com/blog/1677130

 

对于一个WEB应用来说,页面的基本结构往往是固定的,页面中的很多部分,例如页面统一的头部、尾部和菜单,我们一般是不太需要变化的,各个页面基本一致,变化的往往是页面的具体内容部分,这样,布局(layout)功能的使用,就能大大减化前端页面的复杂性了。这里简单介绍一下如何使用velocity框架来实现页面的布局。

         我们知道,要在spring框架中配置velocity,一般需要配置两个bean,一个是velocityConfig, 别一个则是viewResolver。先来看velocityConfig的配置,基本配置如下所示,这里和不使用布局的配置方式没有任何差别。

 

Xml代码  收藏代码
  1. <!-- velocity 配置-->  
  2. <bean id"velocityConfig"  
  3.  class"org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
  4.          <property name"resourceLoaderPath">  
  5.                    <value>WEB-INF/view</value>  
  6.          </property>  
  7.          <property name"velocityProperties">  
  8.                    <props>  
  9.                             <prop key"input.encoding">utf-8</prop>  
  10.                             <prop key"output.encoding">utf-8</prop>  
  11.                    </props>  
  12.          </property>  
  13. </bean>  

 

 

 

         接下来看看viewResolver的配置,在使用布局时,一般会配置如下:

 

Xml代码  收藏代码
  1. <bean id"viewResolver"  
  2. class"org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">  
  3.          <property name"cache" value"true"/>  
  4.          <property name"prefix" value"/"/>  
  5.          <property name"suffix" value".vm"/>  
  6.          <property name"contentType">  
  7.                    <value>text/html;charset=utf-8</value>  
  8.          </property>  
  9.          <property name="toolboxConfigLocation">  
  10.                    <value>/WEB-INF/toolbox.xml</value>  
  11.          </property>  
  12.          <property name="layoutUrl" value="layout/layout.vm" />  
  13.          <property name="allowSessionOverride" value="true"/>  
  14.          <property name="allowRequestOverride" value="true"/>  
  15.          <property name="exposeSessionAttributes" value="true"/>  
  16.          <property name="requestContextAttribute" value="rc"/>  
  17.          <property name="exposeRequestAttributes" value="true"/>  
  18. </bean>  

 

 

         如果你配置过velocity,你会发现与你之前的配置主要有两个地方的差别:

    1.  一般情况下,当我们不使用velocity的布局功能时,我们一般会把viewResolver的class配置为:

org.springframework.web.servlet.view.velocity.VelocityViewResolver,当需要使用布局功能的时候,viewResolver的class需要配置为:

org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver,顾名思义,从命名中我们就能看出来这个viewResolver是支持layout功能的。

    2.  另外一点不同的是,这里多了一个layoutUrl的属性配置:<property name="layoutUrl" value="layout/layout.vm" />, 这个配置是设置你的layout文件的存在路径,需要注意的是,这个路径不是相对于webapp路径来的,而是相对于velocityConfig配置中的resourceLoaderPath属性配置的路径(resourceLoaderPath的路径是相对于webapp的路径)。

 

看看一般情况下,我们的layout页面大概长什么样子吧:

 

Html代码  收藏代码
  1. <body>  
  2.         <div class="content">  
  3.             #parse("/common/header.vm")  
  4.             <div class="content-info">  
  5.                 #parse("/common/leftMenu.vm")  
  6.                 <div class="content-main">  
  7.                     $screen_content  
  8.                 </div>  
  9.             </div>  
  10.             #parse("common/footer.vm")  
  11.         </div>  
  12. </body>  

 

 

解释一下:如果你在处理某个请求时返回了a.vm模板,那么最终返回的页面是:将a.vm模板的内容填充layout页面的$screen_content占位符的内容,然后再将整个填充后的页面返回给用户。如果有兴趣你可以看一下大致的实现原理,其实很简单,就是先调用velocity引擎渲染请求返回的模板,将该渲染结果(一个String类型的字符串)作为一参数传递给layout页面,参数名称就是screen_content,然后再次调用引擎渲染layout页面,这样就会把该screen_content参数对应的值作为页面的一部分渲染出来了,从而实现整个页面的布局功能。

这样,我们就简单介绍了如何简单配置和使用velocity的layout功能了,这里你可以会有疑问了,如果我某个页面需要使用不同的layout页面,甚至我有些页面不需要使用layout功能,该怎么办?其实很简单,我们前面viewResolver配置中,配置的只是默认的layout页面的地址,如果你要使用不同的layout页面,只需在你要返回的页面中如下简单设置一下即可:

 

Html代码  收藏代码
  1. #set($layout = "/layout/layout2.vm")  

 

         这样,我们就强制我们的这个页面使用的是layout2.vm这个页面布局。按照这个思路,如果我在某个特殊的页面,不想使用layout功能了,我们可以再指定另外一个layout页面,只不过这个layout页面内容比较特殊,它没有一般布局页面中有的那些页面统一的头部、尾部和菜单,只有如下所示的一行代码就可以了:

 

Html代码  收藏代码
  1. $screen_content  

 

   由于暂时没找到如何在某个页面中,关闭页面的layout功能,所以想到了上面的方式投机取巧地实现了类似的功能,如果大家有好的方式可以指出。

分享到:
评论

相关推荐

    一套基于SpringMVC+velocity框架的web应用 ,基于注解

    在SpringMVC中,注解如@Controller、@Service、@Repository和@Autowired等,使得开发者无需编写XML配置文件,就能实现组件的声明和依赖注入。这种方式减少了大量的XML配置,提高了开发效率,同时也使代码更加简洁...

    maven+springMVC+mybatis+velocity+mysql+junit 代码生成器

    【标题】"maven+springMVC+mybatis+velocity+mysql+junit 代码生成器" 描述了一个集成开发环境,这个环境结合了多种技术,旨在帮助开发者快速、高效地生成应用程序的基础代码。以下是这些技术及其相关知识点的详细...

    springmvc+velocity+hession+ibatis

    标题 "springmvc+velocity+hession+ibatis" 涉及到的是一个使用Spring MVC、Velocity、Hessian和iBatis构建的Web应用程序。这些技术是Java开发中的关键组件,让我们逐一深入理解它们: 1. **Spring MVC**:Spring ...

    spring mvc sitemesh velocity整合

    在本项目中,Spring MVC与两个额外的技术——Sitemesh和Velocity进行了整合,增强了应用的模板渲染和页面布局能力。 Sitemesh 是一个开源的Web应用装饰器框架,主要用于统一网站的页面布局和样式。通过Sitemesh,...

    SpringMVC原理共3页.pdf.zip

    3. **Controller**:Controller是SpringMVC中的业务逻辑处理组件,通常是一个实现了Controller接口或带有@Controller注解的类。它接收来自DispatcherServlet的请求,执行业务逻辑,并返回ModelAndView对象。 4. **...

    dwz4j-springmvc

    【DWZ】是一个基于Java的开源前端框架...通过深入研究这两个压缩包中的内容,开发者不仅可以掌握DWZ与SpringMVC的集成使用,还能提升Web应用开发的整体能力。在实践中不断探索和学习,将有助于提升工作效率和代码质量。

    SpringMVC.zip

    - Spring MVC可与多种视图技术集成,如JSP、Thymeleaf、Velocity等。 - 使用`ModelAndView`对象返回视图名和模型数据。 7. **国际化和主题** - Spring MVC支持多语言,通过`ResourceBundleMessageSource`加载...

    springMVC3.0

    通过一系列教程,我们可以逐步了解如何在Spring 3.0 MVC中创建Hello World应用、处理表单、支持Tiles布局、实现国际化和本地化、使用主题以及整合Hibernate 3等。每个部分都详细介绍了相关概念和实践操作,帮助...

    Spring MVC配置文档及原理介绍

    此外,Spring MVC支持多种视图技术,如JavaServer Pages (JSP)、Velocity模板引擎、Tiles布局管理器等。这一灵活性意味着Spring MVC不会限制开发者必须使用特定的技术栈,而是提供了一个统一的平台来支持不同的视图...

    spring3.0 mvc中文实例教程

    【Spring3.0 MVC框架简介】 Spring3.0 MVC是Spring框架的重要组成部分,专注于构建高性能、健壮...通过这些教程,开发者可以全面了解和掌握Spring 3.0 MVC框架,从而在实际项目中灵活运用,构建出高效、可靠的Web应用。

    jeecms源码

    Spring的`@Service`注解用于标记服务类,而`@Transactional`注解用于声明方法需要在事务中执行。 3. **控制器(Controller)**:这部分负责接收HTTP请求,调用服务层的方法处理业务逻辑,并将结果转发到视图层。...

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.3.3企业级应用中的依赖注入 ...5.3在spring里使用jdbc ...b.3.4使用gienahtesting在junit4中进行测试 b.4小结

    基于JSP电子商务系统?(论文).zip

    【基于JSP的电子商务系统详解】 在信息技术飞速发展的今天,电子商务已经成为企业不可或缺的一部分,而JSP(Java...在实际开发过程中,应结合项目需求灵活选择技术栈,遵循最佳实践,确保系统的稳定性和可维护性。

    beetl-core

    如果从事Web开发,还需要阅读Beetl提供的Web集成部分的文档,特别是如果Web中使用了AJAX技术,还需要学习如何整合AJAX的局部渲染技术。 Beetl的设计理念是让开发者能够快速上手并高效地使用模板引擎,同时保持了...

    Tapestry开发

    - **跨应用重用困难:**大多数情况下,商业组件的功能很难在其他应用中重用,因为这些功能往往是特定于某个应用的。 - **应用服务的跨应用重用:**相比之下,应用服务如请求路由、错误处理等可以跨应用重用,因为...

Global site tag (gtag.js) - Google Analytics