Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[翻译]VelocityLayoutServlet (VLS) 综观

[翻译]VelocityLayoutServlet (VLS) 综观

作者头像
LeoXu
发布于 2018-08-15 07:10:49
发布于 2018-08-15 07:10:49
31800
代码可运行
举报
文章被收录于专栏:LeoXu的博客LeoXu的博客
运行总次数:0
代码可运行

这一个基本的VelocityViewServlet的一个扩展。它为基于Velocity Tools 的工程项目提供了一个简单的布局控制和定制的错误显示屏幕。VelocityTools已经推出了一个展示使用这个servlet的示例应用。

安装

由于这个类是VelocityViewServlet(VVS)的一个扩展,因此使用它只要简单的把web.xml条目中servlet-class的值改成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.apache.velocity.tools.view.servlet.VelocityLayoutServlet

配置设置

为了控制VLS,可以将三个设置加入到velocity.properties中,或者或使用下面这些默认的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Filepath for error template,
#  relative to web application root directory
tools.view.servlet.error.template = Error.vm

# Directory for layout templates,
#  relative to web application root directory
tools.view.servlet.layout.directory = layout/

# Filepath of the default layout template
#  relative to the layout directory
#  NOT relative to the root directory of the webapp!
tools.view.servlet.layout.default.template =  Default.vm

布局

现在,在你的布局模板中,你事实上只需要做的一件事情就是引用屏幕内容(screen content)。因此一个可以被接受的模板可能像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$screen_content

但是这样就让整件事情变成是毫无意义的浪费时间。至少,你大概将要做下面几行所做的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
<head>
  <title>$!page_title</title>
</head>
<body>
  $screen_content
</body>
</html>

这节省了你在每一个单独的屏幕中(screen)中准备好<html>、<head>和<body>标签。这就是布局的目的:节省精力和消除冗余。请注意这里仍然让内部的屏幕可以控制页面的标题。这样会起作用是因为布局模板是在屏幕准备号以后,通过访问同屏幕一样的上下文环境来实现的,受益于VLS。只要在屏幕中有一个 #set( $page_title = "Hello" )。

多布局

VLS提供两种方法为请求的页面满足一种多布局模板。:

1、在请求参数中指定布局

只要在任何请求参数的查询字符串中加入“layout=MyOtherLayout.vm”,VLS就会找到它(参数指定的布局文件)并且用那个布局,而不是默认的布局来渲染你的屏幕。你如何从查询数据中获取布局参数是没有影响的,只需要它在那里就行了。如果你使用了struts工具,大部分共同的做法可能是这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a href="$link.setRelative('MyScreen.vm').addQueryData('layout','MyOtherLayout.vm')">

但是表单post方式的数据也同样会起作用。

2、为请求的屏幕定制布局。

在请求的屏幕内,放入像下面这样一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#set( $layout = "MyOtherLayout.vm" )

这回直接指示VLS使用“MyOtherLayout.vm”而不是“Default.vm”。在这个范围内设置的布局会覆盖有请求参数设置的任何布局。

”导航(Navigations)“,“Tiles”,怎样弄?

你们中间那些Turbine活着Struts用户将可能不仅仅只设置一下布局和屏幕内容。你想要包含任意的“tiles”活着“navigations”,是不是?那么,得益于Velocity内置的#parse指令,这样做事轻而易举的。

首先,把你的“tile”做为一个单独的文件像下面这样创建:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="footer">I made this!</div>

由于创造能力的缘故,我们假设这段代码在一个像我的应用程序根目录中其他没有被布局的名叫“Footer.vm”的模板文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
<head>
  <title>$!page_title</title>
</head>
<body>

$screen_content

#parse('Footer.vm')

</body>
</html>

很容易,是不是?

现在,如果你拥有许多不同的“footer“文件,并且想让屏幕去决定使用哪一个,该怎么做呢?没问题!像下面这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html>
<head>
  <title>$!page_title</title>
</head>
<body>

$screen_content

#parse( $screen_footer )

</body>
</html>

而在你的屏幕中,只要准备好 #set( $screen_footer = 'FooFooter.vm' ) 。

记住,你的 #parsed 底部模板将会访问跟你的布局一样的velocity上下文环境,一旦屏幕已经为它准备好了,它就可以获得屏幕的上下文环境了。这样就允许你为布局和底部使用来自你的屏幕所设置的变量。

错误屏幕

OK,这里的概念很简单。如果在你的屏幕和布局处理过程的一些点上抛出了不能被catch的异常或者错误,VLS的error()方法就会被调用。它重写了VelocityViewServlet中默认的error()方法,去渲染一个模板,而不是使用硬编码的html。

这个错误屏幕将会在和其他屏幕一样的规则下,在一个布局中被渲染,而且将会有下面这几个值被放进它里面,以便你调试错误。

变量 值

$error_cause 被抛出的 java.lang.Throwable

$stack_trace 俘获的$error_cause.printStackTrace()输出

#if( $invocation_exception )紧随着error()的调用之后是一个MethodInvocationException 的事件中,根原因被从它的里面被挖掘出来,并且被处理上面描述的那样。但是,由于这里模板的引用行为是部分处于错误中的,VLS同样将把MethodInvocationException作为$invocation_exception添加到它的上下文环境中。这样就允许你去发掘引发了根源错误的引用和方法调用。为了获得这些东西,在你的错误模板中做像下面这样一些事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#if( $invocation_exception )
    oh joy! it's a MethodInvocationException!

    Message: $invocation_exception.message
    Reference name: $invocation_exception.referenceName
    Method name: $invocation_exception.methodName
#end

------------------

下面是文章来源:

http://velocity.apache.org/tools/releases/2.0/view.layoutservlet.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013/06/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Apache Velocity-----基于Java的模板引擎
Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业务逻辑层之间的隔离(即MVC设计模式)。
wuweixiang
2018/08/14
10.5K0
JSP Layout详细介绍
JSP Layout 是一个用来实现 JSP 布局支持的简单示例项目。该项目只需要一个 Servlet 类,一些配置即可。下载的压缩包中包含一个完整的项目,可直接导入 Eclipse 进行编译。运行时只需要在 Tomcat 或者其他应用服务器上配置一个web应用,并将路径指向解压后的webapp目录即可。例如: <Context path="" docBase="D:\WORKDIR\JSP Layout\webapp" reloadable="true"/> 启动后直接访问 http://localhos
MonroeCode
2018/02/09
1.3K0
来了!他来了!支持MVVM的BRVAH来了!
博客:https://blog.csdn.net/Shaojihan/article/details/103673399
陈宇明
2020/12/16
1.2K0
来了!他来了!支持MVVM的BRVAH来了!
webpack通用功能开发 原
在util/mm.js下,包含ajax的数据请求,服务器地址的获取,url正则提取后的路径,html模板渲染的,成功、错误提示,字段的正则验证,对登录的统一处理等
晓歌
2018/08/15
6010
webpack通用功能开发
                                                                            原
[翻译]使用 Velocity 构建一个web应用
作为JSP的替代方案,Velocity 经常被用来在应用中生成web页面。使用Velocity生成页面的一些好处有:
LeoXu
2018/08/15
6410
pjax使用小结
上周看到一篇文章在分析简书 我的主页 页面 3 个 tab 页切换的 bug,起先以为是寻常的样式 bug 而已没怎么在意,后来在文章中看到 pjax 这个术语,长得和 ajax 有点像,遂去了解了下。
Lansonli
2021/10/09
3.1K0
第7章 Spring Boot集成模板引擎小结
因为Spring Boot其实是对Spring生态的封装整合打包,以简化开发中使用Spring框架。所以 Spring Boot在集成模板引擎过程中,其实就是对传统SpringMVC集成对应模板引擎的打包自动化配置。
一个会写诗的程序员
2018/08/20
2.5K0
第7章 Spring Boot集成模板引擎小结
Maven、Webx、Velocity学习总结
1. 综述 这两周的时间,通过看指南,看代码,跑实例,对淘宝网web应用开发框架有了一个整体的初步认识,主要包括四个方面: Ø 项目管理工具Maven Ø MVC框架Webx。 Ø Webx中的View层实现——Velocity Ø Webx中的Model持久层实现——Ibatis 2. Maven部分 2.1. Maven基础 1. 坐标是指项目的唯一标识,以GAV(groupId,artifactId和version)区分, groupId包含公司和内部组(或产品线)的信息,如com.taobao.m
挑战者
2018/06/29
1.2K0
SringBoot整合velocity及常用语法
项目地址:https://github.com/chywx/springboot-velocity
陈灬大灬海
2020/04/10
1.6K0
SringBoot整合velocity及常用语法
ThinkPHP-视图的使用和渲染(三)
下面是一个简单的示例,演示了如何使用视图类来加载模板文件、传递变量数据、设置布局文件和输出页面内容。
堕落飞鸟
2023/05/02
4290
ASP.NET MVC 5 - 视图
在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML。 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所引入的Razor视图引擎(Razor view engine)。Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优雅的方式来使用C#语言创建所要输出的HTML。用Razor编写一个视图模板文件时,将所需的字符和键盘敲击数量降到了最低,并实现了快速,流畅的编码工作流程。 当前在控制器类中的Inde
葡萄城控件
2018/01/10
3.6K0
ASP.NET MVC 5 - 视图
springBoot——Web开发简介【七】
1. 所有 /webjars/ ,都去 classpath:/META-INF/resources/webjars/ 找资源** webjars:以jar包的方式引入静态资源 http://www.webjars.org/
思索
2024/08/16
1170
springBoot——Web开发简介【七】
04 . Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一。 组件可以扩展 HTML 元素,封装可重用的代码。 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的
iginkgo18
2020/11/24
1.5K0
04 .  Vue组件注册,组件间数据交互,调试工具及组件插槽介绍及使用
SpringBoot(四)之thymeleaf的使用
这篇文章将更加全面详细的介绍thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。 thymeleaf介绍 简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这
用户1195962
2018/03/28
2.8K0
SpringBoot ( 四 ) :thymeleaf 使用详解
简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:
前朝楚水
2018/07/26
1.4K0
SpringBoot ( 四 ) :thymeleaf 使用详解
Thymeleaf【快速入门】Thymeleaf介绍
然后官网还给出了一段看起来仍然像HTML一样工作的集成了Thymeleaf模版的代码,我们大致的来感受一下:
我没有三颗心脏
2019/01/03
3.9K0
velocity笔记(一)什么是velocity,我们什么时候会使用到这个,基本语法,利用模板生成实体类的各层代码
也就是前端程序员写velocity模板,后端程序员写数据模型,最后整合就是展示给用户的东西
一写代码就开心
2022/05/09
1.1K0
velocity笔记(一)什么是velocity,我们什么时候会使用到这个,基本语法,利用模板生成实体类的各层代码
亿及流量多级缓存 - 一致性哈希负载均衡与模板渲染
Lua 实现的一个简单的 LRU 缓存,适合在 Lua 空间里直接缓存较为复杂的 Lua 数据结构:
Parker
2020/07/22
2K0
亿及流量多级缓存 - 一致性哈希负载均衡与模板渲染
【Web前端】CSS 响应式设计(补充)
随着移动设备的普及,网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示,还要适应不同设备的特性。
一条晒干的咸鱼
2024/11/19
5540
【Web前端】CSS 响应式设计(补充)
ThinkPHP-视图的使用和渲染(二)
在ThinkPHP中,我们可以使用layout方法来设置布局文件。layout方法需要传入布局文件的路径,例如:
堕落飞鸟
2023/05/02
7000
相关推荐
Apache Velocity-----基于Java的模板引擎
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验