一 vm 是什么 ?
vm是一种页面的格式,全称是velocity model ,velocity 模板的意思,针对我们目前的项目可以看到处理的格式是这样的,请求地址是htm,指令是action,参数是&拼接的,而返回地址的页面是*.vm,经过velocityviewservlet 转换就可以吧模板文件进行merge变成可读的页面文件,通过response返回给界面。
而servlet拓展除了各种请求的模板方式,包括.do,.action ,而对应的页面的形式有jsp,php,asp,所以需要注意的是静态的html文件是可以直接打开的,而动态的必须是在服务器环境下才可以打开,要通过引擎处理优化输出html格式的才可以。
二 vm怎么用 ?
vm是基于java的模板引擎,可以吧java定义返回的对象,字符串,属性直接以相应的模式解析出来,加载在标签中。所以相应的方法只要按照属性获取,列表循环获取即可。
三 常用的vm的语法有什么 ?
而针对复杂的逻辑,一般的语法是解决不了所有问题的,那么vm为我们准备了哪些常用语法呢?
1 设置变量 所有的变量默认按照字符串的形式获取
#set ($count='是的')
vm是弱类型的变量,但是要注意一下几点,
vm中的字符串将会被重新解析 特别是$命名的
vm变量的命名是一个大小写的字母开始的,所以货币符号的使用是没有问题的
正确的使用变量的方法是${var} 而$var 也是可以获取的,但是实现无缝拼接的时候,需要区分
获取属性的时候,属性加在{}里面
变量可以使变量引用,字符串,数字,属性引用,方法引用,数组列表
#set( $monkey = $bill ) ## variable reference
#set( $monkey.Friend = "monica" ) ## string
#set( $monkey.Blame = $whitehouse.Leak ) ## property reference
#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference
#set( $monkey.Number = 123 ) ##number
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
vm中的属性不会识别为属性变量,而是识别为属性方法
2 循环
#foreach($l in $list)
$l 可以是一个具体的字符串,也可能是一个对象,继续读取属性方法 ($l.attr)
#end
循环的长度 $!list.size()==0
另外 需要注意的是 $! 是判断对象是否存在的方法 如果存在 显示 如果不存在 不显示 为false
3 条件判断
#if(condition)
#elseif(condition)
#else
#end
条件开始判断 只要一个开始 一个结束语法 而且是就近匹配 注意与循环的嵌套使用
4 注释 一般情况下 为了更好的理解你的页面语法 需要一定的注释语句
单行注释 ## 多行注释 # # 文档注释 # #
5 逻辑运算
&& || !
真或 以及假或的使用
6 宏的使用
也就是vm语法的函数,定义函数
#macro(宏的名称 $参数1 $参数2 …)
语句体(即函数体)
#end
使用函数,注意的是 参数之间空格隔开
#宏的名称($参数1 $参数2 …)
7 引入文件
#include #parse 分别用于引入文件 ,一个适用于多个 ,一个适用于单个
8 内置对象
$request、$response、$session,另外,模板内还可以使用 $msg内的消息工具访问 Struts 的国际化资源,达到简便实现国际化的方法。
9 一些零碎的知识点 ,不在描述
例如 #stop 停止模板的渲染 ,\ 用于转义 等等,语法嵌套使用
四 vm 的页面模板如何快速应用?
- eclipse设置vm文档关联步骤 :
打开Eclipse —-》window——》preference ——-》Content type——-》Text——》Html ——-》Add ———》 - 项目配置
首先需要配置的是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>
<bean id= "velocityConfigurer"
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>