- 浏览: 136424 次
- 性别:
- 来自: 陕西榆林
文章分类
最新评论
-
威化考拉:
不错
log4j 日志配置 -
davidforit:
changli_annie 写道初始化的时候 那个callba ...
自动补全下拉框(可输入匹配的下拉框) -
changli_annie:
初始化的时候 那个callback需要怎么传值?
自动补全下拉框(可输入匹配的下拉框) -
changli_annie:
能否把JSP页面分享下》?
自动补全下拉框(可输入匹配的下拉框) -
changli_annie:
jsp页面如何调用的呢?$("#containerI ...
自动补全下拉框(可输入匹配的下拉框)
9.1 使用Velocity模板
Velocity是一种针对Java应用的易用的模板 语言。Velocity模板中没有任何Java代码,这使得它能够同时被非开发人员和开发人员轻松地理解。Velocity的用户手册上是这么说 的:“Velocity将Java代码从Web页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。”
除了JSP,Velocity可能是用于Web应用的最流行的模板语言。因此很可能你会想采用Velocity作为视图层技术开发基于Spring的应用。幸运地是,Spring支持将Velocity作为Spring MVC的视图层模板语言。
9.1.1 定义Velocity视图
假设你已经选择使用Velocity而不是JSP来创 建Spring培训应用的视图。你需要使用Velocity模板编写的页面之一是显示可用课程列表的页面。程序清单 9.1 显示了courseList.vm,一个和courseList.jsp等价的用于显示课程列表的Velocity模板。
程序清单9.1 基于Velocity的课程列表
<html> <head> <title>Course List</title> </head> <body> <h2>COURSE LIST</h2> <table width="600" border="1" cellspacing="1" cellpadding="1"> <tr bgcolor="#999999"> <td>Course ID</td> <td>Name</td> <td>Instructor</td> <td>Start</td> <td>End</td> </tr> #foreach($course in $courses) <tr> <td> <a href="displayCourse.htm?id=${course.id}"> ${course.id} </a> </td> <td>${course.name}</td> <td>${course.instructor.lastName}</td> <td>${course.startDate}</td> <td>${course.endDate}</td> </tr> #end // 在所有课程中循环 </table> </body> </html>
可能你首先注意到的是这个模板中没有任何模板标签。这 是因为Velocity不是基于与JSP类似的标签的,而是采用了它自己的语言——称为Velocity模板语言(VTL)——用于流程控制和其他指令。 在courseList.vm中,#foreach指令用于循环处理一个课程列表,显示每个课程的明细。除了这个Velocity和JSP的基本区别之 外,你会发现Velocity的表达式语言和JSP很相似。事实上,当JSP使用${}作为它自己的表达式语言时,它不过是模仿Velocity的做法而 已。这个模板仅仅演示了很少一部分你可以使用Velocity所做的事情。
9.1.2 配置Velocity引擎
首先需要配置的是Velocity引擎自己。要做到这点,可以通过以下方式在Spring配置文件中声明一个VelocityConfigurer Bean:
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath"> <value>WEB-INF/velocity/</value> </property> </bean>
VelocityConfigurer负责在 Spring中设置Velocity引擎。这里,我们通过属性resourceLoaderPath告诉Velocity到哪里寻找它的模板。我们建议将 模板放到WEB-INF的某个子目录下面,这样可以保证这些模板不能被直接访问。也可以通过velocityProperties属性来设置其他 Velocity的配置细节。例如下面的VelocityConfigurer配置:
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath"> <value>WEB-INF/velocity/</value> </property> <property name="velocityProperties"> <props> <prop key="directive.foreach.counter.name">loopCounter</prop> <prop key="directive.foreach.counter.initial.value">0</prop> </props> </property> </bean>
9.1.3 解析Velocity视图
要使用Velocity模板视图,你必须做的最后一件事情是配置一个视图解析器。具体地说,需要以如下方式在Spring上下文配置中声明一个VelocityViewResolver Bean:
<bean id="viewResolver" class="org.springframework. web.servlet.view.velocity.VelocityViewResolver"> <property name="suffix"><value>.vm</value></property> </bean>
VelocityViewResolver和 Velocity的关系与InternalResourceViewResolver和JSP的关系相似。正如 InternalResourceViewResolver,它使用prefix属性和suffix属性由视图的逻辑名构造出模板文件的路径。这里我们仅 仅设置suffix属性为“.vm”扩展名。由于模板目录的路径已经通过VelocityConfigurer的resourceLoaderPath属 性配置好了,因此这里不需要设置前缀。
注意:这里把Bean的ID设置为viewResolver。这一点 很重要,因为我们并没有配置DispatcherServlet检测所有的视图解析器。如果要同时使用多个视图解析器,则你很可能需要将这个ID改成某个 更合适的名字(并且是惟一的),比如velocityViewResolver。
现在,你的应用系统已经可以渲染基于Velocity模板的视图了。你只需要在返回的ModelAndView对象中通过逻辑名引用所需的视图。以ListCourseController为例,不需要做其他事情,因为它已经返回如下的ModelAndView对象:
return new ModelAndView("courseList", "courses", allCourses);
视图的逻辑名为“courseList”。当解析这个视图时,“courseList”加上后缀“.vm”构成了一个模板名“courseList.vm”。VelocityViewResolver会在WEB-INF/velocity路径下寻找这个模板。
9.1.4 格式化日期和数字
尽管应用已经配置成可以渲染Velocity视图了, 但我们还有一些杂七杂八的问题需要解决。当你比较程序清单9.1中的couseList.vm和courseList.jsp时,会注意到 courseList.vm没有像courseList.jsp一样对课程的ID、开始日期和结束日期进行格式化。在courseList.jsp中,课 程ID显示为一个6位定长的前面以零补齐的数字,而所有的日期以完整格式显示。为了完成courseList.vm,你需要对它作进一步的调整,对ID和 日期属性进行格式化。
VTL并不直接支持日期和数字的格式化,而是通过提供 日期和时间的工具类来支持格式化。为了允许使用这些工具,你需要告诉VelocityViewResolver在模板中暴露它们时使用的属性名。这些属性 名是通过VelocityViewResolver的dateToolAttribute和numberToolAttribute属性来规定的:
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> … <property name="dateToolAttribute"> <value>dateTool</value> </property> <property name="numberToolAttribute"> <value>numberTool</value> </property> </bean>
在这里,我们规定数字工具通过numberTool属性暴露给Velocity使用。因此,要格式化课程ID,你只需要通过数字工具的format()方法来处理课程ID即可,如下:
$numberTool.format("000000", course.id)
方法format()的第一个参数是模式字符串,在这 里我们规定课程ID显示为6个数字的域,必要时在前面补零。模式字符串的语法和java.text.DecimalFormat一致。请参考 Velocity关于NumberTool的文档来获取更多关于该工具功能的信息。
类似地,我们分配日期工具使用dateTool属性。为了格式化课程的开始和结束日期,只需使用日期工具的format()方法:
$dateTool.format("FULL", course.startDate)
$dateTool.format("FULL", course.endDate)
9.1.5 暴露请求和会话属性
尽管需要在Velocity模板中显示的大多数数据都可以通过ModelAndView对象的模型Map传递给视图,有时候也会需要显示servlet请求或会话中的属性。比如,当用户登录到应用系统时,用户的信息可能存放在servlet会话中。
如果在每一个控制器中都将请求或会话的属性复制到模型 Map中,这会是非常笨拙的。幸运的是,VelocityViewResolver会帮你将这些属性复制到模型中。属性 exposeRequestAttributes和exposeSessionAttributes告诉VelocityViewResolver是否需 要将servlet请求和会话中的属性复制到模型中。比如:
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> … <property name="exposeRequestAttributes"> <value>true</value> </property> <property name="exposeSessionAttributes"> <value>true</value> </property> </bean>
9.1.6 在Velocity中绑定表单域
在第8章中,我们看到如何使用Spring的<spring:bind>JSP标签将表单域绑定到一个命令对象中。这个标签在向用户显示表单域相关的错误时也是非常有用的。
幸运的是,当你使用Velocity而不是JSP时,不必放弃<spring:bind>提供的功能。Spring提供了若干个Velocity宏来模仿<spring:bind>标签的功能。
例如,假设Spring培训应用的学生注册表单是用Velocity模板编写的。程序清单9.2显示了registerStudent.vm中的一段,演示如何使用#springBind宏:
程序清单9.2 在Velocity模板中使用#springBind
#springBind("command.phone") phone: <input type="text" name="${status.expression}" value="http://www.blog.edu.cn/$!status.value"> <font color="#FF0000">${status.errorMessage}</font><br> #springBind("command.email") email: <input type="text" name="${status.expression}" value="http://www.blog.edu.cn/$!status.value"> <font color="#FF0000">${status.errorMessage}</font><br>
#springBind宏的参数是被绑定表单域的引用路径。它在模板中设置了一个名为status的变量用于保存表单域的名称、值以及可能出现的任何错误信息(可能来自一个验证器)。
如果错误信息中包含在HTML中有特殊意义的字符(比如:<,>,&),你可能需要对错误信息进行转义以正确显示在Web浏览器中。在这种情况下,你需要使用宏#springBindEscaped而不是#springBind:
#springBindEscaped("command.email", true)
除了域的引用路径之 外,#springBindEscaped宏接受一个boolean参数,表明是否需要对错误信息中的HTML特殊字符进行转义。如果该参数为 false,则宏#springBindEscaped和#springBind的行为完全一样,HTML特殊字符不会被转义。
为了在模板中使用Spring的宏,你需要通过VelocityViewResolver的exposeSpringMacroHelpers来使用这些宏:
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> … <property name="exposeSpringMacroHelpers"> <value>true</value> </property> </bean>
通过把exposeSpringMacroHelpers属性设为true,你就能在Velocity模板中使用#springBind和#springBindEscaped宏。
尽管Velocity是一种广泛使用的JSP的替代技术,它不是惟一可以使用的替代模板技术。FreeMarker是另一种广为人知的用于在MVC应用的视图层中替代JSP的模板语言。
发表评论
-
html5 Canvas 钟表
2017-01-11 16:20 825html5 canvas 画钟表例子 ... -
HTML5 Canvas几种画法
2016-12-28 15:46 623html5 Canvas画布画图几 ... -
jquery分页打印
2016-11-15 15:16 1552js 实现分页打印功能的整理,完整示例,参考地址: h ... -
bootstrap 风格左侧菜单
2016-09-21 14:59 4091bootstrap+jquery 左侧菜单实现 ... -
window.onbeforeunload,浏览器关闭提示,兼容IE、FF、Chrome
2016-07-11 16:35 8090浏览器关闭提示, 兼容IE、FF、Chrome,其它浏览器可 ... -
自动补全下拉框(可输入匹配的下拉框)
2016-01-06 11:51 8958功能优化, 1、增加 ... -
bootstrap 弹出框 alert、confirm
2015-12-08 17:58 23058代码调用 showTip("haha&q ... -
用CSS3美化半个字符巧妙方法
2015-08-14 16:10 586更多详细内容点击 .halfStyle { ... -
jquery 插件, 自定义 的confirm 弹出框
2014-09-11 11:27 1637<!DOCTYPE html> < ... -
jquery print 部分区域打印
2014-09-03 14:46 2703声明: 本文是我看完 jQuery 插件 jquer ... -
jQuery 插件开发 精简概括
2014-08-29 17:02 1122<!DOCTYPE html> < ... -
Jquery 属性attr("checked") 特性prop("checked") 全选问题
2014-08-06 10:25 1485$("#chkAll").bi ... -
CSS3 Media Queries详解 (响应式设计)
2014-07-17 16:00 1078Media Queries直译过来就是“媒体查询”,在我们 ... -
css3属性之一: border-radius
2012-12-13 16:55 758CSS3属性之一:border-radius ... -
ymprompt的使用
2012-09-05 13:55 1306组件调用方式1(传统参数传入方式): 示例 ... -
innserHTML 和 pasteHTML的区别
2014-03-28 09:15 861innerHTML 是一个属性,可以取得或者设定该元素 ... -
Freemarker 全面教程
2012-05-03 15:26 1084转自 : http://demojava.iteye.co ... -
JSP自定义标签开发入门
2012-05-02 13:34 934JSP自定义标签开发入门(转) 一般情况下开发jsp自定 ... -
Spring中使用FreeMaker或Vilocity发送邮件(转)
2012-04-28 09:50 1120本文以用户注册后为用户发送一封邮件为例子, ... -
javascript and printer
2011-10-28 16:25 10961. 直接调用 window.print(); ...
相关推荐
将Spring MVC与Velocity整合,可以实现高效且易于维护的前端展示。 **1. Spring MVC 概述** Spring MVC是Spring框架的一部分,它提供了一个灵活的MVC实现,包括请求处理、模型绑定、异常处理等功能。通过...
2.导入本项目中的org.springframework目录下的velocity支持类,原样copy过去或自己打个jar 3.不想写java类配置就直接@ImportResource({"classpath:velocity.xml"})原来的xml配置 4.其他原来是啥就是啥开工
总的来说,"springmvc+mybatis+velocity整合实例"提供了一个轻量级且功能齐全的Web开发基础,适合快速搭建项目。通过这个整合,开发者可以充分利用Spring MVC的控制层优势、MyBatis的数据访问便捷性,以及Velocity的...
**整合 Shiro、Spring 和 Velocity** 1. **Shiro 安全框架** Shiro 可以接管系统的安全性,负责用户登录、权限控制、密码加密和缓存管理。通过 Shiro,你可以定义 URL 过滤规则,将权限与用户角色关联,避免每次...
在这个项目中,"velocity spring jpa hibernate 整合"涉及到的是四个关键组件:Velocity、Spring、JPA(Java Persistence API)和Hibernate。让我们逐一深入理解这些技术并探讨它们如何协同工作。 1. **Velocity**...
整合Spring MVC、Sitemesh和Velocity的过程主要包括以下几个步骤: 1. **引入依赖**:首先,需要在项目中添加Spring MVC、Sitemesh和Velocity的相关依赖库,这通常通过Maven或Gradle的配置文件完成。 2. **配置...
整合Spring、SpringMVC、Mybatis、Velocity和Maven可以创建出高效、可维护的Java Web应用。这个压缩包提供的示例项目是学习和理解这些技术如何协同工作的绝佳资源。开发者可以通过分析和运行这个项目,深入理解这些...
本篇文章将通过一个简单显示用户信息的实例整合Spring mvc+mybatis+Maven+velocity+mysql. 一、.Maven工程目录 二、Spring mvc + mybatis +maven实现 1.Mysql数据库表数据
本实例将探讨如何使用Maven作为项目管理工具,结合Spring MVC作为控制层框架,Mybatis作为数据访问层框架,以及Velocity作为视图层模板引擎,来构建一个完整的Java Web应用。以下是关于这些技术的详细解释和整合步骤...
本示例提供了一个基于Maven、Spring MVC、Mybatis和Velocity的整合实例,旨在帮助开发者理解并掌握这四大技术栈的协同工作方式。这四个组件在Java Web开发中扮演着至关重要的角色: 1. Maven:Maven是一款项目管理...
本示例聚焦于“SpringMVC+ibatis+velocity”的整合应用,这是一套常用的Java Web开发组合,用于构建动态、数据驱动的网站。下面我们将深入探讨这三个组件的核心功能及其整合过程。 首先,SpringMVC是Spring框架的一...
Spring MVC、Hibernate和Velocity的整合主要体现在以下方面: 1. **数据访问**:Spring MVC可以通过Hibernate的SessionFactory和Session接口进行数据持久化操作,Spring提供了声明式事务管理,简化了事务控制。 2. ...
通过这个项目,开发者可以学习到如何在实际应用中整合Spring、Velocity和iBatis,理解它们之间的协作方式,以及如何在Java Web开发中构建高效的分层架构。同时,这也是一个实践依赖注入、模板引擎和数据库操作的好...
第一章 企业项目开发--maven+springmvc+spring+mybatis+velocity整合代码的github地址:https://github.
Struts2.2、Velocity、Tiles、Spring3和MyBatis3.05是Java Web开发中的重要组件,它们的整合构建了一个强大的企业级应用框架。这个实例将深入讲解如何将这些技术有效地融合在一起,创建一个高效且灵活的后端系统。 ...
本话题将详细讲解如何在Spring MVC框架中整合Velocity和JSP,实现多视图解析器的功能,从而根据需求返回不同的视图。 **1. Velocity模板引擎** Velocity是一个开源的Java模板引擎,它允许开发者将业务逻辑与展示...
Struts2、Spring和Velocity是Java Web开发中的三个重要框架,它们共同构建了一个高效、灵活且可扩展的应用程序架构。让我们深入探讨这三个组件以及如何在项目中整合它们。 **Struts2** 是一个基于MVC(Model-View-...
在这个"SpringMVC+Velocity+iBATIS的整合小demo"中,可能包含了这些配置文件、Controller类、Service接口及其实现、Mapper接口及其XML配置、Velocity模板文件等。通过这些文件,我们可以看到一个完整的Java Web应用...
Spring Boot简化了Spring的初始化和配置过程,而Velocity则是一个强大的模板引擎,常用于生成动态内容。 1. **SpringBoot基础**: Spring Boot是基于Spring框架的微服务开发工具,它内置了Tomcat服务器,简化了...