Velocity用法以及注意事项
Velocity:
首先我们来看看Velocity、Freemarker、Jsp之间到底有什么区别。模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了。
模板技术作为view的好处是很多,尤其和jsp比较起来优点更大,众所周知jsp需要在第一次被执行的时候编译成servlet,那么这个过程是很慢的,
当然很多应用服务器都提供预编译的功能,但是在开发的时候仍然给我们程序员带来了很多痛苦,每次修改都要多几秒钟,
那在一天的开发中就有很多时间浪费在jsp的编译上了。
我们把模板技术引入到view中去可以带来更好的开发效率,而且模板的速度要比jsp快。
当然模板技术可以用在很多领域,可不只在view那里。
我们可以通过模板技术来生成xml,生成jsp,生成java文件等等。
至于Velocity和Freemarker之间,区别不是很大,我们可以随意选择其中一个作为View
Velocity是一个基于java的模板引擎(template engine),缩写为VTL(velocity template language)。
以下是velocity在实际应用中的用法以及各用法需要注意的地方:
判断一个字符串类型的变量是否为空串或null
可能报错的写法: $!userBaseInfoVO.phone != "" 当userBaseInfo对象为null或userBaseInfoVO.getPhone()返回null,就报错了 建议写法: $stringUtil.isNotBlank($!userBaseInfoVO.phone)
判断boolean值
可能报错的写法: #if($stringUtil.equals($resultCode,"true")) 当resultCode对象为boolean类型就报错了 建议写法:#if($resultCode)或者 $stringUtil.equals(“$!resultCode“, "true")
判断两个字符串是否相等
可能报错的写法: $!resultCode.toString() == "1000" 当resultCode对象为null就报错了 建议写法: $stringUtil.equals($!resultCode, "1000")
判断两个非字符串对象是否相等
可能报错的写法: $accountTransRes.result != $TransResultEnum.TXN_RESULT_SUCCESS 当accountTransRes为null或accountTransRes.getResult()返回null,就报错了;另一种情况是,当accountTransRes.getResult()返回的类型与TransResultEnum.TXN_RESULT_SUCCESS不一致,也会报错。 建议写法: {{!$objectUtil.equals($accountTransRes.result, $TransResultEnum.TXN_RESULT_SUCCESS) }}
输出一个值
可能报错的写法: $accountTransRes.transAmount 当accountTransRes为null或accountTransRes.getTransAmount()返回null,就报错了 建议写法: $! {accountTransRes.transAmount}
赋值
可能报错的写法: #set ($login_email = $!rundata.request.getParameter("login_email")) 当rundate.getRequest().getParameter("...")返回null,就报错了 建议写法: #set ($login_email = $stringUtil.defaultIfNull($!rundata.request.getParameter("login_email"))) 可能报错的写法: #set ($tradeTransportType = $tradeDetail.tradeLogistics.transportType.intValue()) 当tradeDetail为null或tradeDetail.getTradeLogistics()或tradeDetail.getTradeLogistics().getTransportType()为null,就报错了。 建议写法: #set ($tradeTransportType = $objectUtil.defaultIfNull($!tradeDetail.tradeLogistics.transportType.intValue(), 0))
Money类的比较
错误的写法:#if($amount != 0) 因为$amount是money类型,不直接和0做比较。 建议写法:#if($!amount&& (0 != $!amount.cent.intValue()))
pojo中boolean属性的读取
如果你有如下的一个javabean: public class MoneyReportModel { …… /**优惠是否为负数,由于调整价格可能为负数,所以必须加上这个 */ private boolean isNegConcession; …… } 在页面上面你应该如何读取isNegConcession这个变量呢? 错误的写法:$moneyReportModel.isNegConcession 正确的写法: $moneyReportModel.isNegConcession() 如果boolean的名字不是以is开头,比如: private boolean freezeFlag; 在页面上用 $moneyReportModel. freezeFlag或$moneyReportModel. isFreezeFlag()都可以获取该变量的值。
<strong>vm页面循环显示list的值</strong>
<select name="status"> <option value="">全部</option> #foreach($sysdict in $sdList) <option value="$sysdict.code">$sysdict.name</option> #end </select>
vm页面循环显示map的值:
Map m = new HashMap(); m.put("113", "test1"); request.setAttribute("dds", m);// 后台 vm页面 #foreach($info in $dds.entrySet()) $info.key $info.value #end
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: php 调用java 接口
- 下一篇: velocity模板语言之变量的赋值与使用区别小论