第一次接触Velocity,两个小时就能看完。但是看完一遍之后却没能记住多少,只能是心里有了个大概的印象。最近项目的需要,开始把前端HTML页面拆分成对应的vm模板,对Velocity的使用才更加了然于心。
以前前端渲染常用的技术就是JSP,所以不禁会想Velocity和JSP的区别。Velocity和JSP非常的接近,都能完成动态页面的渲染。但是Velocity比JSP的功能更加强大而且能很好的弥补JSP的不足。JSP是HTML中嵌入JAVA代码,这样使得前端页面复杂性提高,而且不利于前端人员对页面的维护。因为很多前端工程师可能不太懂JSP,甚至对其完全不知道。这样使项目的可维护性降低。作为前端模板Velocity学习成本低,其简单的语法很容易上手,这样前端后台开发人员都能很快入手。而且利用Velocity可以实现更纯正的MVC模式。提高项目的可维护性。Velocity不仅可以渲染动态页面还可以作为一个工具类来生成源代码、报表、邮件模板等。
Velocity Template Language(VTL)常用语法:
#+指示符 表示要做什么 eg. #set($a = “Velocity”) 给变量a赋值
$+变量名 表示要展示什么 eg. $a 展示a的值
单行注释##,多行注释#* *#
展示变量的属性 eg.$var.value VM模板中的变量名($后面的)必须和后台传递到前端的名称一致
属性查找顺序:eg. $var.value 的查找顺序是1,getvalue() 2,getValue() 3,get(“value”) 4,isValue()
引用正规格式${变量名} eg. ${var} 简洁格式为$var 下面这种情况必须要用正规格式 1,Jack is a $vicemaniac.2,Jack is a ${vice}maniac.
使用\转义 eg.#set($var = “value”) \$var 会直接显示$var,而不是value
条件判断:#if(…) … #elseif(…) …#else … #end
循环: #foreach($a in $ vars) … #end
与或非:$a && $b, $a || $b, !$a
宏调用:#macro指令让模板可以重用,或者可以理解为一个函数调用。eg. #macro(name, $param1_id, $param2_name)
< span class=”$param1)id”>$param2_name< /span>
#end
最后说说webx中vm模板引用control两种方式和这两种方式的区别:
1,$control.setTemplate(“…”);
2,#parse(“…”)
其中1中的方式control的模板里能够动态渲染,也就是后台对应的Java类会执行。而2的方式不会执行后台对应的Java类,也就是其页面中的动态内容不能得到渲染。