Spring 整合 velocity

Unity安卓打包实战:SDK与JDK配置全攻略 本文详细介绍了Unity安卓打包过程中SDK与JDK的配置方法,包括工具下载、安装步骤、环境变量设置及常见错误排查。通过实战指南帮助开发者快速完成Unity安卓打包环境搭建,提升开发效率。 阅读详情
使用Velocity模板 

Velocity是一种针对Java应用的易用的模板语言。Velocity模板中没有任何 Java代码,这使得它能够同时被非开发人员和开发人员轻松地理解。Velocity的用户手册上是这么说的:“Velocity将Java代码从Web 页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。” 

除了JSP,Velocity可能是用于Web应用的最流行的模板语言。因此很可能你会想采用Velocity作为视图层技术开发基于Spring的应用。幸运地是,Spring支持将Velocity作为Spring MVC的视图层模板语言。 

让我们通过基于Velocity重新实现Spring培训应用中的视图层来看一下如何在Spring MVC中使用Velocity。 

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所做的事情。 

如果想知道更多,可以访问Velocity位于http://jakarta.apache.org/velocity的主页。注意当完成模板之后,你需要配置Spring使它可以在MVC应用中使用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> 

可以注意到velocityProperties属性使用一个<props>元素来设置多个属性。在这里可以设置的属性与一个典型的Velocity应用中通过“velocity.properties”文件设置的属性是一样的。缺省地,Velocity的#foreach循环维护一个名为$velocityCount的循环计数器,该计数器在第一轮循环开始时从1开始计数。但这里我们设置属性directive.foreach.counter.name为loopCounter,因此将使用$loopCounter来引用循环计数器。我们也通过设置属性directive.foreach.counter.initial.value为0使循环计数器由零开始计数。(想知道关于 Velocity配置属性的信息,请参考Velocity开发者指南http://jakarta.apache.org/velocity/developer-guide.html。) 

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对象中 


详细出处参考:http://www.itqun.net/content-detail/232935.html 
通过逻辑名引用所需的视图。以ListCourseController为例,不需要做其他事情,因为它已经返回如下的ModelAndView对象: 

return new ModelAndView("courseList", "courses", allCourses); 

视图的逻辑名为“courseList”。当解析这个视图时,“courseList”加上后缀“.vm”构成了一个模板名“courseList.vm”。VelocityViewResolver会在WEB-INF/velocity路径下寻找这个模板。 

至于“courses”模型对象,它会作为一个Velocity属性暴露给Velocity模板使用。在程序清单9.1中,它就是在#foreach指令中使用的集合对象。 

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) 

与数字工具的format()方法一样,第一个参数也是模式字符串。模式字符串的语法与 java.text.SimpleDateFormat一致。另外,也可以设置模式字符串为FULL、LONG、MEDIUM、SHORT或 DEFAULT中的一个,以使用标准的java.text.DateFormat模式。这里我们设置模式字符串为FULL来表示完整的日期格式。请参考 Velocity关于DateTool的文档来获得更多关于该工具功能的信息。 

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> 

这两个属性的默认值都为false。但在这里我们把这两个属性都设置为true,从而请求和会话的属性都会被复制到模型中,并且在Velocity模板中可见。 

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的模板语 
FINN vs GFED vs GFAS vs QFED:四大火灾排放清单实战对比(含Python数据处理代码) 本文针对GFED、FINN、GFAS、QFED四大主流火灾排放清单,提供了实战对比分析与Python数据处理代码。通过量化对比东南亚农业火点与亚马逊雨林大火两个典型场景,揭示了不同清单在时空分辨率、算法内核和应用场景上的核心差异,并给出了基于研究目标、区域和模型的清单选择决策框架,帮助研究人员为空气质量模拟或火灾影响评估挑选最合适的数据源。 阅读详情

相关推荐

MacBook Pro 合盖省电终极配置:pmset 5条命令实现一夜掉电<1%

本文详细介绍了如何通过5条pmset终端命令优化MacBook Pro的合盖休眠设置,实现一夜掉电<1%的极致省电效果。针对M系列芯片的特性,文章解析了MacOS的休眠机制,并提供电池模式与电源模式的差异化配置方案,帮助用户显著提升续航表现。

weixin_33824385的博客 476

Spring整合velocity

关键字:Spring中使用Velocity模板 使用Velocity模板 Velocity是一种针对Java应用的易用的模板语言。Velocity模板中没有任何 Java代码,这使得它能够同时被非开发人员和开发人员轻松地理解。Velocity的用户手册上是这么说的:“Velocity将Java代码从Web 页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的Java...

chenpingtai2008的博客 260

使用html和JavaScript实现一个简易的物业管理系统

码实现了一个简易的物业管理系统,主要使用了以下技术和功能: 1.主要技术 使用的技术: HTML: 用于构建网页的基本结构。 包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。 设置字体、颜色、边距、对齐方式等样式。 JavaScript: 用于处理用户交互和动态更新页面内容。 实现了新增住户、查询住户、编辑住户、删除住户等功能。 处理表单提交事件,验证输入数据,并更新表格显示。 DOM操作: 使用 JavaScript 直接操作 HTML DOM 元素。 动态

weixin_41312759的博客 1777

springMvc集成Velocity

一、什么是VelocityVelocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。 1.Web 应用:开...

weixin_34308389的博客 213

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req

qq_26751379的博客 2万+

Docker深度详解:从原理到实践的全方位指南

本文深入解析了Docker容器化技术的核心原理与实战应用。主要内容包括:1) Docker核心架构与优势,对比容器与虚拟机的关键差异;2) 企业级部署方案,涵盖离线安装与多镜像源配置;3) 高级镜像构建技术,如参数化构建、缓存优化及安全扫描;4) 容器生命周期管理,包括健康检查、资源限制及数据持久化方案。文章提供了丰富的代码示例和生产级配置建议,如使用Trivy进行安全扫描、精确控制容器资源等技术细节,帮助开发者全面掌握现代容器化技术。

weixin_42593797的博客 1280

Spring MVC与Velocity整合

Spring MVC与Velocity整合Velocity简介Velocity应用场景SpringMVC+Velocity整合1. pom.xml文件2. 视图配置3. 配置velocity.properties文件4. 编写velocity页面5. 控制层代码6. 页面展示 Velocity简介 Apache Velocity 是一个基于java的模板引擎(template engine)。它允...

mry6的博客 829

vue3+ts项目里如何使用状态管理pinia以及数据持久化

vue3 pinia 数据持久化

ICUiseeyou的博客 8793

SpringBoot-Velocity模板引擎

它允许任何人仅仅使用简单的模板语言来引用由java代码定义的对象。本案例使用动态生成文件。

孟孟的博客 2964

pix4d安装步骤

pix4d三维模型软件的安装步骤

Little_Bee_27000的博客 1万+

CANoe_Demo_下载以及安装教程

CANoe Demo下载安装流程

Jar_Lee的博客 1万+

Spring中使用Velocity模板

使用Velocity模板Velocity是一种针对Java应用的易用的模板语言。Velocity模板中没有任何Java代码,这使得它能够同时被非开发人员和开发人员轻松地理解。Velocity的用户手册上是这么说的:“Velocity将Java代码从Web页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。”除了JSP,

Zfrong繁荣的IT技术、IT项目、解决方案专栏Blog-上海 4001

YOLOv8的特征蒸馏代码应用讲解(CWD/MGD/mimic/在线蒸馏/逻辑蒸馏)

基于YOLOv8的逻辑蒸馏、特征蒸馏、在线蒸馏等方法代码介绍。

qq_41920323的博客 2582

velocity使用(二)--velocity与spring整合

一、简介 在文章velocity使用(一)--简介中,我们对velocity进行了基本介绍。在本文, 将介绍velocity与spring的整合,以及自定义指定的使用。 二、velocity与spring整合的开发流程 1、添加maven依赖(spring的依赖在此略写) org.apache.velocity velocity 1.7 org.

panda-star的博客 1159

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

spring整合struts2和velocity

一、spring整合struts2 1、导入spring依赖 <!--spring包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </d

debug_fang的博客 559

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

velocity和spring整合

没想到velocity也能和spring整合,这个配置说起来比较简单,研究起来花了我好几天饿。。。 突然脑袋里有点新奇的想法,MVC模式,实现View的有velocity,jsp,实现Controler的有struts,spring(MVC部分),turbine和servlet,M就比较少,ejb,pojo等,然后他们互相组合。。。好多种可能啊,先记下,以后有机会研究: 1、velocity+

CTO=开发管理+架构+技术专栏 862

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

spring MVC整合velocity

spring整合velocity必须下载velocity jar和velocity-tools jar包,将解压文件中的velocity-1.*.jar和velocity-tools-1.*.jar jar包引入web项目。 转载于:https://www.cnblogs.com/Jiphen/archive/2013/03/12/2956172.html...

weixin_30877181的博客 183

Spring Boot整合Velocity 模板引擎

通过上述步骤,我们可以轻松地在Spring Boot项目中整合Velocity模板引擎,利用其强大的功能来渲染动态网页。Velocity的简洁语法和Spring Boot的便利性相结合,大大提高了开发效率和项目的可维护性。版权声明:本博客内容为原创,转载请保留原文链接及作者信息。参考文章SpringBoot整合Velocity(十二)_springboot 集成velocity 模板文件放在resourse中-优快云博客。

ning的博客 2464

spring mvc整合velocity

Spring mvc和velocity都是当前流行的框架,在我当前的项目中就用到了这两个框架,在搭建的过程中,虽然对于配置的步骤及使用的过程都比较清楚,但是要没有任何参照一下写出所有的配置记住所有的配置类名等,还是不大可能做到的,本文将讲解spring mvc和velocity的整合步骤,顺便做一下备忘。 web.xml配置,这里只讲mvc部分,不包含spring本身的配置: &lt;se...

iteye_19426的博客 128

Spring+Mybatis+Velocity整合(2):整合SpringMvc和Velocity

velocity是一个基于java的模板引擎。velocity应用于web开发时,前端设计人员可以只关注页面的显示效果,而java程序人员只关注业务逻辑代码。velocity将java代码从web页面中分离出来。 当然velocity还有其他用途,例如,它可以从模板中产生SQ...

chuiyangkai5914的博客 185

spring整合velocity和freemaker

spring整合velocity和freemaker

Coolyqq的专栏 979

spring struts velocity 怎么整合

在做一个系统,使用spring做为框架,struts当controller,velocity做为view, spring 与struts 是这样整合的: stuts-config.xml中: [code="java"] [/code] beans.xml中: [code="java"] [/code] 现在想在vm文件中使用sp...

NicholasBugs 220

java 一个velocity导入两个velocity_Spring MVC 与 Velocity 整合

5、现在编写Velocity模板,在WebRoot/velocitly下面建立一个courseList.vm的文件,内容如下:Course ListCOURSE LISTCourse IDNameInstructorStartEnd#foreach($course in $courses)${course.id}$course.name$course.instructor.lastName${co...

weixin_42386511的博客 153

Spring MVC整合Velocity

Spring MVC整合Velocity,就要引入相关的包,需要导入的包如下图 pom引入: <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId>...

weixin_30657999的博客 102
上一篇: spring中的ResourceBundleMessageSource复习
下一篇: RESTEasy hello world example
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值