httl 一个比freemarker 还牛逼的静态框架

学习案例


-----------------------------------------转型函数(可以与set配合,以供后调)-----------------------------------
obj.to("com.foo.Bar")
obj.toMap
num.toDate
str.toDate
str.toDate("yyyy-MM-dd HH:mm:ss")
str.toChar
str.toBoolean
str.toByte
str.toInt
str.toLong
str.toFloat
str.toDouble
str.toClass
str.toLocale
----------------------------------------------集合函数()-------------------------------------------------
数组和List一样可以用size方法获取大小
array.size
list.size
map.size

list.sort
#for(item : list.sort)
#end

list.toCycle
#set(colors = ["red","blue","green"].toCycle)
#for(item : list)
${colors.next}
#end
--------------------------------------------日期操作符()---------------------------------------------------
date1 > date2
date1 >= date2
date1 < date2
date1 <= date2
--------------------------------------------集合操作符()---------------------------------------------------
${list[0]} 等价于:${list.get(0)}

${map.abc} 等价于:${map.get("abc")}

${map["a.b.c"]} 等价于:${map.get("a.b.c")}

序列生成: 1..3
比如:
#for(i : 1..10)
${i}
#end

List生成: [123,"abc", var]
比如:
#for(color : ["red","yellow","blue"])
${color}
#end

Map生成: ["xxx": 123,"yyy":"abc","zzz": var]
比如:(此Map保持声明时的顺序)
#for(entry : ["red":"#FF0000","yellow":"#00FF00"])
${entry.key} = ${entry.value}
#end

集合相加:list1 + list2
比如:
#for(item : list1 + list2)
${item}
#end
----------------------------------------------逻辑操作符()-------------------------------------------------
#if(object)
等价于:
#if(object != null)

#if(string)
等价于:
#if(string!= null && string.length() > 0)

#if(list)
等价于:
#if(list != null && list1.size() > 0)

#for(item : list1 || list2)
等价于:
#for(item : list1 != null && list1.size() > 0 ? list1 : list2)

例子如下:

demo_a.httl        模板样例
===============================================@@int@@================================================================
输出:${_int}
===============================================@@Integer@@============================================================
输出:${_Integer}
===============================================@@String@@=============================================================
输出:${_String}
===============================================@@BigDecimal@@=========================================================
#set(BigDecimal price = _BigDecimal)输出:${price.format("###,##.##")}  [@此处有静态方法处理价格@]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -实际调用下面的静态方法:(被调对象作为第一个参数传入,后面的参数原样传入,注意,类型要严格匹配)public static String format(Date date, String format) {return new SimpleDateFormat(format).format(date);}
===============================================@@Date@@===============================================================
输出:${_Date}
===============================================@@ItemVO@@=============================================================
输出:
书名 ${_Book.title}
作者 ${_Book.author}
出版商 ${_Book.publisher}
书名 ${_Book.title}
出书日期 ${_Book.publication}
读者 直接读取对象:${_Book.reader}

--------------------------------
读取列表
-----------------遍历开始---------------
  • ${reader}
  • 共${for.size}位读者------------------------此处是for的一些判断位置:第${for.index+1}位

-----------------遍历结束---------------

-----------------二次接收对象遍历开始 说明:
要先设置变量
\#set(List readers = _Book.reader)
---------------
#set(List readers = _Book.reader)
  • ${reader}

-----------------二次接收对象遍历结束---------------

===============================================@@集合对象@@===========================================================
输出:
书名 ${r.title}
作者 ${r.author}
出版商 ${r.publisher}
书名 ${r.title}
出书日期 ${r.publication}

================================================包含模板 开始========================================================
#set(bk = _Book)$!{include("demo_b.httl")}
================================================包含模板 结束========================================================
=====================================================多层list集合复合对象 开始============================================
${vo.name}手机
#set(List subKindVO = vo.subKindVOList)
#set(int one_for = for.index + 1) 第${one_for}层循环     第${for.index + 1}次 ${vo.name}:${skvo.name}
#set(List labelVO = skvo.labelVOList)
第${one_for}层循环          ${skvo.name}的第${for.index + 1}次循环 功能:${lvo.name}
=====================================================多层list集合复合对象 结束============================================
==============================================验证以下的传参方式==========================================================
#[${include("/demo/demo_inc_c.httl",["download": "active"])}]#
==================================================#[if else 判断语法]#======================================================
百度谷歌========================================================================================================
========================================================================================================
========================================================================================================
demo_b.httl 模板样例 接收父模板数据:========================================================================================================
@@@${bk.title}@@ int:${_int}
${_BigDecimal}被格式化后结果是:   
#set(BigDecimal price = _BigDecimal) BigDecimal:${price.format("###,##.##")}
Date:${_Date}
Book:
书名${_Book.title}
作者${_Book.author}
出版商${_Book.publisher}
书名${_Book.title}
出书日期${_Book.publication}
读者 直接读取对象:${_Book.reader}

--------------------------------
读取列表
-----------------遍历开始---------------
  • ${reader}

-----------------遍历结束---------------

-----------------二次接收对象遍历开始 说明:
要先设置变量
\#set(List readers = _Book.reader)
---------------
#set(List readers = _Book.reader)
  • ${reader}

-----------------二次接收对象遍历结束---------------

demo_inc_c.httl include 传参成功 结果:>${download}< include 传参成功 end

你可能感兴趣的:(httl 一个比freemarker 还牛逼的静态框架)