`
beckjacy
  • 浏览: 12185 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

velocity的布局

阅读更多

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

对于一个WEB应用来说,页面的基本结构往往是固定的,页面中的很多部分,例如页面统一的头部、尾部和菜单,我们一般是不太需要变化的,各个页面基本一致,变化的往往是页面的具体内容部分,这样,布局(layout)功能的使用,就能大大减化前端页面的复杂性了。这里简单介绍一下如何使用velocity框架来实现页面的布局。
         我们知道,要在spring框架中配置velocity,一般需要配置两个bean,一个是velocityConfig, 别一个则是viewResolver。先来看velocityConfig的配置,基本配置如下所示,这里和不使用布局的配置方式没有任何差别。

Xml代码  收藏代码
<!-- velocity 配置--> 
<bean id= "velocityConfig" 
class= "org.springframework.web.servlet.view.velocity.VelocityConfigurer"> 
         <property name= "resourceLoaderPath"> 
                   <value>WEB-INF/view</value> 
         </property> 
         <property name= "velocityProperties"> 
                   <props> 
                            <prop key= "input.encoding">utf-8</prop> 
                            <prop key= "output.encoding">utf-8</prop> 
                   </props> 
         </property> 
</bean> 



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

Xml代码  收藏代码
<bean id= "viewResolver" 
class= "org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver"> 
         <property name= "cache" value= "true"/> 
         <property name= "prefix" value= "/"/> 
         <property name= "suffix" value= ".vm"/> 
         <property name= "contentType"> 
                   <value>text/html;charset=utf-8</value> 
         </property> 
         <property name="toolboxConfigLocation"> 
                   <value>/WEB-INF/toolbox.xml</value> 
         </property> 
         <property name="layoutUrl" value="layout/layout.vm" /> 
         <property name="allowSessionOverride" value="true"/> 
         <property name="allowRequestOverride" value="true"/> 
         <property name="exposeSessionAttributes" value="true"/> 
         <property name="requestContextAttribute" value="rc"/> 
         <property name="exposeRequestAttributes" value="true"/> 
</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代码  收藏代码
<body> 
        <div class="content"> 
            #parse("/common/header.vm") 
            <div class="content-info"> 
                #parse("/common/leftMenu.vm") 
                <div class="content-main"> 
                    $screen_content 
                </div> 
            </div> 
            #parse("common/footer.vm") 
        </div> 
</body> 


解释一下:如果你在处理某个请求时返回了a.vm模板,那么最终返回的页面是:将a.vm模板的内容填充layout页面的$screen_content占位符的内容,然后再将整个填充后的页面返回给用户。如果有兴趣你可以看一下大致的实现原理,其实很简单,就是先调用velocity引擎渲染请求返回的模板,将该渲染结果(一个String类型的字符串)作为一参数传递给layout页面,参数名称就是screen_content,然后再次调用引擎渲染layout页面,这样就会把该screen_content参数对应的值作为页面的一部分渲染出来了,从而实现整个页面的布局功能。
这样,我们就简单介绍了如何简单配置和使用velocity的layout功能了,这里你可以会有疑问了,如果我某个页面需要使用不同的layout页面,甚至我有些页面不需要使用layout功能,该怎么办?其实很简单,我们前面viewResolver配置中,配置的只是默认的layout页面的地址,如果你要使用不同的layout页面,只需在你要返回的页面中如下简单设置一下即可:

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

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

Html代码  收藏代码
$screen_content 

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

 

分享到:
评论

相关推荐

    Velocity入门教程(Spring集成Velocity)

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

    velocity模板引擎

    velocity与freemaker、jstl并称为java web开发三大标签技术,一、定义变量二、遍历数组三、遍历HashTable四、判断是否为空五、数值、日期格式化六、国际化七、内建对象八、include、parse实现布局模块化

    Velocity:加速JavaScript动画-开源

    Velocity是一个动画引擎,具有与jQuery动画... 尽管Velocity与jQuery一起使用,但它使用自己的动画堆栈,该堆栈通过两个基本原理提供其性能:1)同步DOM→补间堆栈以最小化布局抖动,以及2)缓存值以最小化DOM查询。

    网页设计自问题

    网页制作 1. 创建本地站点? 2. 怎么彻底删除站点与dramweaver的关联? 3. 文件打开快捷键? 4. 保存文件快捷键? 5. 跟踪图像?...【修改】&gt;【表格】 【插入】&gt;【表格】&gt;【布局】 11. 表格嵌套有什么用?

    仿Iphone中搜索结果的布局详解

    代码如下:public class Search extends LinearLayout implements OnClickListener, OnKeyListener, ... private static final float ANIMATION_VELOCITY = 1.0f; /** The distance in dips between the optic

    velocity:Web应用程序检索与给定用户名匹配的人员档案

    这样做是为了将页面布局与流控制和数据处理分开。 为了防止在不同源的变量和函数名称之间产生冲突,使用对模型和控制器代码进行了组织。 最后,在测试文件夹中提供了模型功能的单元测试。浏览器此应用程序已在以下...

    RenRenSlideMenuDemo.zip

    包括获取屏幕的宽度,给content布局重新设置宽度,给menu布局重新设置宽度和偏移距离等。 */ private void initValues() { WindowManager window = (WindowManager) getSystemService(Context.WINDOW_SERVICE);...

    react-cucumber:演示如何使用Cucumber.js测试Meteor应用程序的示例应用程序

    React流星模板 这是使用React.js作为视图层的Meteor.js应用程序的样板模板 安装 运行以下命令以使bash文件正常工作: ...velocity:html-reporter 包含的组件 主布局 主标题 主脚 用户登录 表单输入 AuthErrors

    cucumber-tutorial:ryanswapp创建的一个简短的Cucumber教程

    React流星模板 这是使用React.js作为视图层的Meteor.js应用程序的样板模板 安装 运行以下命令以使bash文件正常工作: ...velocity:html-reporter 包含的组件 主布局 主标题 主脚 用户登录 表单输入 AuthErrors

    java开发常用jar包

    commons-beanutils.jar ...velocity-1.6.2.jar velocity-1.6.2-dep.jar velocity-tools-1.4.jar velocity-tools-view-1.4.jar velocity基于java的模板引擎,允许用简单的模板语言来引用java定义的对

    spring in action英文版

     9.3 使用Tile设计页面布局  9.3.1 Tile视图  9.3.2 Tile控制器  9.4 产生非HTML输出  9.4.1 产生Excel工作表  9.4.2 产生PDF文档  9.4.3 产生其他非HTML文件  9.5 小结  第10章 使用其他...

    Valentine-开源

    一个与Apache Velocity一起使用的软件包,它允许您从可重用的Velocity模板片段构建网页和其他内容,这些片段由XML中的布局描述层次结构控制。

    倒排索引源码java-react-native-recyclerview-list:ReactNative的RecyclerView实现

    scrollToIndex方法中的velocity参数正是为此 初始滚动索引:指定启动时的滚动位置,不会有闪烁 低内存使用:它只呈现可见项目和周围的一些额外项目 支持两种滚动方向:使用inverted prop来反转滚动方向 注意事项 它...

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    aps-calc:从深度APS Shell计算器

    不支持Graviton Ram,因为我还没有花时间来获取该模块的AP,KD和Velocity修改器 局限性: 不计算HE,碎片,剥落或EMP损坏; 而是使用倍增器,因为所有这些弹头都以相同的方式缩放,因此对于FlaK,frag和EMP,最...

    matlab提取文件要素代码-SFND_Radar_Target_Generation_and_Detection:使用2DFFT形成距离多普

    项目布局 根据系统要求配置FMCW波形。 定义目标的范围和速度并模拟其位移。 对于相同的仿真循环过程,发送和接收信号将确定拍频信号 对接收到的信号执行范围FFT以确定范围 最后,对第二个FFT的输出执行CFAR处理以...

    roller

    -多用户博客:可支持数以万计的用户和博客-具有三个权限级别的团体博客(编辑者,作者和受限博客)-支持评论审核和防止评论垃圾邮件措施-博客可以通过以下方式完全控制博客的布局/样式Apache Velocity驱动的模板-...

Global site tag (gtag.js) - Google Analytics