前几天接触了一个相对老一些的项目,渲染模板用的velocity,之前并没有接触过这个模板,所以也难免踩了踩坑,现在把页面上用到的一些语法总结一下,包括if、for、set等,希望可以给同道中人带来一点点帮助。
说明:velocity使用#作为关键符号,访问后台传过来的数据时使用$进行访问,例如:后台modelAndView.addObject("module","abc"),前台使用$module就可以获取到module的内容。
后台代码:
@RequestMapping("/")
public ModelAndView index(){
List<String> dataList = new ArrayList<>();
dataList.add("第一个");
dataList.add("第二个");
dataList.add("第三个");
ModelAndView mv = new ModelAndView("page/index");
mv.addObject("dataList", dataList);
mv.addObject("tempFlag", 1);
return mv;
}
获取map的值
${dataMap.get('key')}
if语法
使用格式:#if...#end、 #if...#else...#end、 #if...#elseif....#else...#end
例子:
#if($tempFlag && $tempFlag=0)
<p>这是一个内容</p>
#else
<p>这是另一个内容
#end
注意:#if与(没有空格,要紧挨着。
set语法
使用格式:#set($变量名=xxx),定义之后,就可以在页面中使用$变量名了
例如:#set($currentTemp = $tempFlag)
这句就是把后台传过来的tempFlag的值赋给了新变量currentTemp,定义之后就可以直接在页面中使用$currentTemp了。
注意:如果需要用到加减乘除符号时,符号两边必须要加空格。例如:
#set($index = $index + 1)
for语法
使用格式:#for($变量 in 集合)
例如:
#if($dataList && $dataList.size() > 0)
#foreach($item in $dataList)
<p>$item</p>
#end
#end
备注: #if判断的意义是判断dataList是否存在,并且不是空集合
这种场景就是最基础的直接把集合的内容循环出来,还有另一种场景,前几个数据用一种样式展示,后几个数据用另一种样式展示,代码如下图所示。
#if($dataList && $dataList.size() > 0)
#set($index=0)
<div class="fourLine">
#foreach($item in $dataList)
#if($index < 4)
<p> $item </p>
#set($index = $index + 1)
#else
#break
#end
#end
</div>
#if($dataList.size() > 4)
#set($endIndex = $dataList.size() - 1)
<div class="fourLine">
#foreach($temp in [4..$endIndex])
#set($currentData=$dataList.get($temp))
<h1>$currentData</h1>
#end
</div>
#end
#end
知识点:#break退出for循环,继续执行for后面的语句。
2023.3.15补充
"{}"符号
用来明确标识Velocity变量,可以和页面内容区分开来,例如${name}是一句学生,可以和页面内容紧挨着展示。
"!"符号
两种作用:
- 放在$后面,用来强制把不存在的变量显示为空白,例如$!{flag}
- 放在$前面,用来判断布尔变量,例如#if(!${flag})
基本上就是这些了,欢迎大家多多指教!