`

velocity的布局

 
阅读更多

对于一个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的路径)。

 

web.xml

<servlet>
	    <servlet-name>velocity</servlet-name>
	    <servlet-class>org.apache.velocity.tools.view.servlet.VelocityLayoutServlet</servlet-class>
	    <load-on-startup>1</load-on-startup>
	  </servlet>
	  <servlet-mapping>
	    <servlet-name>velocity</servlet-name>
	    <url-pattern>*.vm</url-pattern>
	  </servlet-mapping>

 

 

  测试的controller

  

@Controller
@RequestMapping(value = "/test/")
public class TestController {

@RequestMapping("{module}")
    public String page1(@PathVariable String module){
		System.out.println("module"+module);
		return module;
    }
	
	
	@RequestMapping("{module}/{name}")
    public String page2(@PathVariable String module,@PathVariable String name){
		System.out.println("module"+module);
		System.out.println("name:"+name);
		 return module+"/"+name;
		
    }
	
	
	@RequestMapping("{module}/{name}/{item}")
    public String page3(@PathVariable String module,@PathVariable String name, @PathVariable String item){
		System.out.println("module"+module);
		System.out.println("name:"+name);
		System.out.println("item:"+item);
		return module+"/"+name+"/"+item;
		
    }

}

 


 

  layout.vm写法



 

 效果:

 



 
 

看看一般情况下,我们的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  

 

  • 大小: 19.9 KB
  • 大小: 12.7 KB
  • 大小: 9.8 KB
分享到:
评论

相关推荐

    Velocity入门教程(Spring集成Velocity)

    Velocity入门教程,语法,Velocity布局,Spring框架集成Velocity

    VelocityLayoutDemo

    VelocityLayoutDemo是一个示例项目,它展示了如何使用Velocity布局库在Android开发中创建动态和交互式的用户界面。Velocity布局库是专门为Android平台设计的一个高效、易用的动画库,能够帮助开发者实现流畅、复杂的...

    velocity-1.7.jar

    在1.7版本中,Velocity提供了一种简洁、高效的模板语言,使得非程序员(如内容创作者)也能方便地修改页面布局,而程序员则负责处理数据和业务逻辑。 **核心概念和特点:** 1. **模板语言**:Velocity使用自己的...

    velocity的所有jar包

    - **分离关注点**:模板设计师专注于布局和样式,而开发者处理业务逻辑,两者的工作可以独立进行。 - **高效性能**:Velocity在编译模板后生成Java源码,然后由JVM执行,这使得其运行速度快且资源消耗低。 - **可...

    velocity的学习资料

    Velocity在Web开发中常被用来生成HTML、XML、CSV或其他格式的文档,将内容和表现分离,让开发者专注于业务逻辑而不用关心页面布局。在这个"velocity的学习资料"压缩包中,我们很可能会找到关于Velocity的基本概念、...

    velocity文档(Velocity1.4java开发指南中文版,Velocity1.4模板使用指南中文版中文版)

    2. **分离关注点**:Velocity 允许设计师使用 HTML 和 CSS 进行页面布局,而开发者只需关注数据处理,两者可以独立工作。 3. **强大的上下文**:Velocity 提供了一个上下文对象,用于存储和传递数据到模板。开发者...

    Velocity

    Velocity的核心概念是模板语言,它设计的目标是易于理解和使用,同时提供足够的灵活性以满足复杂的页面布局需求。模板语言的设计原则是“what you see is what you mean”(WYSIWYM),即模板作者所见即为最终用户...

    velocity官方工具包

    Velocity的主要目标是将呈现逻辑从应用逻辑中分离出来,使得开发者可以专注于业务逻辑的实现,而设计人员则可以专注于页面的布局和设计。这个官方工具包不仅包含了Velocity的核心库,还提供了丰富的示例,帮助用户...

    velocity中文

    Velocity是一款基于Java的模板引擎,它允许开发者将HTML页面设计与业务逻辑相分离,让网页设计人员专注于页面布局,而程序员则专注于编写控制逻辑。Velocity通过简单的语法使得模板语言与Java代码隔离,提供了一种...

    JAVA的Velocity语法学习

    Velocity通过简单的语法,将业务逻辑与表现层分离,使得开发者可以专注于业务逻辑的编写,而不用关心HTML、CSS等页面布局的细节。这极大地提高了开发效率和代码的可维护性。 ** Velocity语法基础 ** 1. 变量引用:...

    velocity中文文档 教程

    Velocity是一款开源的Java模板引擎,它允许开发者将HTML页面的呈现逻辑与业务逻辑分离,使得网页设计人员可以专注于页面的布局和样式,而程序员则专注于编写应用程序的后端逻辑。Velocity由Apache软件基金会开发并...

    Velocity标签详解文档

    它采用模板语言(Template Language),使得非程序员,如网页设计师,能够专注于页面布局和样式设计,而将复杂的业务逻辑留给Java程序员处理。这种分离使得开发过程更为高效,尤其在遵循MVC(Model-View-Controller...

    velocity1.5

    - **模板继承**:Velocity 1.5支持模板继承,允许创建一个基础模板,然后由其他模板继承并覆盖部分内容,从而实现模板的复用和统一的布局设计。 - **宏**:Velocity中的宏类似于函数,可以定义重用的代码块。通过`#...

    maven velocity

    它的设计目标是使开发者可以专注于内容,而不是HTML布局。Velocity模板语言(VTL)简单易用,支持条件语句、循环结构以及变量引用,使得模板和业务逻辑分离,提高了代码的可读性和维护性。 ** Maven与Velocity整合 ...

    Velocity模板应用案例

    Velocity通过将逻辑与呈现分离,使得开发者可以专注于业务逻辑,而设计师可以自由地设计页面布局,提高了开发效率和代码的可维护性。 在Web应用开发中,Velocity作为一个强大的模板语言,广泛应用于生成HTML、XML、...

    velocity插件与学习文档

    4. **模板布局**: 可以使用Velocity设计模板布局,通过`#include`或`#parse`指令包含其他模板文件。 5. **模板设计原则**: 遵循良好的模板设计原则,如避免复杂的逻辑处理,保持模板简洁易读。 在实际应用中,...

    velocity+itext导出pdf

    2. **初始化 Velocity**:在Java代码中,需要导入`org.apache.velocity.app.VelocityEngine`并实例化,配置Velocity的属性,如模板路径、缓存策略等。 3. **设置上下文**:创建一个`VelocityContext`对象,将需要在...

    apache velocity介绍及资料

    这使得开发人员可以专注于业务逻辑,而网页设计师则可以专注于页面的布局和样式。 Velocity 提供了一种类似于编程的语言,称为Velocity Template Language (VTL),它允许在模板中嵌入控制结构(如条件语句和循环)...

Global site tag (gtag.js) - Google Analytics