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

原创 2015年07月10日 14:02:01

学习案例


-----------------------------------------转型函数(可以与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<!DOCTYPE html><html lang="en" ly:set="Book _Book, ItemVO item, KindVO vo"><head>    <meta charset="UTF-8">    <title>模板样例</title></head><body><br/>===============================================@@int@@================================================================<br/>输出:${_int}<br/>===============================================@@Integer@@============================================================<br/>输出:${_Integer}<br/>===============================================@@String@@=============================================================<br/>输出:${_String}<br/>===============================================@@BigDecimal@@=========================================================<br/>#set(BigDecimal price = _BigDecimal)输出:${price.format("###,##.##")}  [@此处有静态方法处理价格@] <br/>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -实际调用下面的静态方法:(被调对象作为第一个参数传入,后面的参数原样传入,注意,类型要严格匹配)public static String format(Date date, String format) {return new SimpleDateFormat(format).format(date);}<br/>===============================================@@Date@@===============================================================<br/>输出:${_Date}<br/>===============================================@@ItemVO@@=============================================================<br/>输出:</br><table>    <tbody>    <tr>        <th>书名</th>        <td>${_Book.title}</td>    </tr>    <tr>        <th>作者</th>        <td>${_Book.author}</td>    </tr>    <tr>        <th>出版商</th>        <td>${_Book.publisher}</td>    </tr>    <tr>        <th>书名</th>        <td>${_Book.title}</td>    </tr>    <tr>        <th>出书日期</th>        <td>${_Book.publication}</td>    </tr>    <tr>        <th>读者</th>        <td>            直接读取对象:${_Book.reader}<br/>            <br/>--------------------------------<br/>            <span>读取列表</span>            <br/>-----------------遍历开始---------------<br/>            <ul ly:for="String reader : _BList">                <li>${reader}</li>                <li ly:if="for.last">共${for.size}位读者------------------------此处是for的一些判断位置:第${for.index+1}位</li>            </ul>            <br/>-----------------遍历结束---------------<br/>            <br/>-----------------二次接收对象遍历开始 说明:<br/>            要先设置变量<br/>            \#set(List readers = _Book.reader)<br/>            ---------------<br/>            #set(List readers = _Book.reader)            <ul ly:for="String reader : readers">                <!-- 只输出第一次-->                <li ly:if="for.index==1">${reader}</li>            </ul>            <br/>-----------------二次接收对象遍历结束---------------<br/>        </td>    </tr>    </tbody></table><br/>===============================================@@集合对象@@===========================================================<br/>输出:<br/><table ly:for="Book r: _ListBook" style="border-bottom: 1px solid #aa0000">    <tbody ly:if="for.index<=2">    <tr>        <th>书名</th>        <td>${r.title}</td>    </tr>    <tr>        <th>作者</th>        <td>${r.author}</td>    </tr>    <tr>        <th>出版商</th>        <td>${r.publisher}</td>    </tr>    <tr>        <th>书名</th>        <td>${r.title}</td>    </tr>    <tr>        <th>出书日期</th>        <td>${r.publication}</td>    </tr>    </tbody></table><br/>================================================包含模板 开始========================================================<br/>#set(bk = _Book)$!{include("demo_b.httl")}<br/>================================================包含模板 结束========================================================<br/>=====================================================多层list集合复合对象 开始============================================<br/>${vo.name}手机<br/>#set(List subKindVO = vo.subKindVOList)<div ly:for="SubKindVO skvo:subKindVO">    #set(int one_for = for.index + 1)    第${one_for}层循环        第${for.index + 1}次    <span>${vo.name}:${skvo.name}</span><br/>    #set(List labelVO = skvo.labelVOList)    <div ly:for="LabelVO lvo:labelVO">        第${one_for}层循环                        ${skvo.name}的第${for.index + 1}次循环        <span>功能:${lvo.name}</span><br/>    </div></div>=====================================================多层list集合复合对象 结束============================================<br/>==============================================验证以下的传参方式==========================================================<br/><!---->#[${include("/demo/demo_inc_c.httl",["download": "active"])}]# <br/>==================================================#[if else 判断语法]#======================================================<br/><a ly:if="1==1" href="http://www.baidu.com/">百度</a><a ly:else="2==1" href="#">谷歌</a>========================================================================================================<br/>========================================================================================================<br/>========================================================================================================<br/></body></html>demo_b.httl
<!DOCTYPE html>
<html lang="en" ly:set="Book _Book, Book bk">
<head>
    <meta charset="UTF-8">
    <title>模板样例</title>
</head>
<body>
接收父模板数据:========================================================================================================<br/>
@@@${bk.title}@@

int:${_int}<br/>
${_BigDecimal}被格式化后结果是:   <br/>
#set(BigDecimal price = _BigDecimal)
BigDecimal:${price.format("###,##.##")}<br/>
Date:${_Date}<br/>
Book:
<table>
    <tbody>
    <tr>
        <th>书名</th><td>${_Book.title}</td>
    </tr>
    <tr>
        <th>作者</th><td>${_Book.author}</td>
    </tr>
    <tr>
        <th>出版商</th><td>${_Book.publisher}</td>
    </tr>
    <tr>
        <th>书名</th><td>${_Book.title}</td>
    </tr>
    <tr>
        <th>出书日期</th><td>${_Book.publication}</td>
    </tr>
    <tr>
        <th>读者</th>
        <td>
            直接读取对象:${_Book.reader}<br/>
            <br/>--------------------------------<br/>
            <span>读取列表</span>
            <br/>-----------------遍历开始---------------<br/>
            <ul ly:for="String reader : _BList">
                <li>${reader}</li>
            </ul>
            <br/>-----------------遍历结束---------------<br/>

            <br/>-----------------二次接收对象遍历开始 说明:<br/>
            要先设置变量<br/>
            \#set(List readers = _Book.reader)<br/>
            ---------------<br/>
            #set(List readers = _Book.reader)
            <ul ly:for="String reader : readers">
                <li>${reader}</li>
            </ul>
            <br/>-----------------二次接收对象遍历结束---------------<br/>
        </td>
    </tr>
    </tbody>
</table>
<br/>

</body>
</html>


demo_inc_c.httl

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
include 传参成功
结果:>${download}<
include 传参成功 end
</body>
</html>

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于在httl中解析map、list及自定义实体类

最近写了一个H5页面,用的就是httl,由于传回来的数据比较复杂,解析数据是遇到了很多的问题,下面我介绍一下关于数据的解析。 关于Map: 1.首先在页面最开始应该要引入改数据,也可以说是定义吧!...

HTTL的使用和理解

第一: HTTL只有六个指令:#set, #if, #else, #for, #break, #macro,并且不会增加。 books)-->

httl语法

HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似。个人觉得ht...

20个代码生成框架

1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:http://forum.code...

浅谈jsp、freemarker、velocity区别

以前做web开发页面层用的基本就是就是,最近公司java项目页面层用的技术是velocity。听说jsp要淘汰,也不知道是真是假,但本人还是比较喜欢jsp的,下面是网上查找的javaweb项目页面3种...
  • tjcyjd
  • tjcyjd
  • 2013-11-18 13:51
  • 47900

Java面试题全集(上)

2013年年底的时候,我看到了网上流传的一个叫做《Java面试题大全》的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对这个所谓的《...

网页编程自学历程一:编写一个静态网页框架

本文涉及到的转载内容:http://blog.csdn.net/ljl157011/article/details/16842669 作为一个计算机专业的学生,我觉得在大学生涯中,我们有必要学会如何编...

一个静态库框架模板: iOS Universal Framework Mk 7

一个静态库框架模板: iOS Universal Framework Mk 7 分类: iPhone开发2012-03-19 15:57 109人阅读 评论(0) 收藏 举报 ...

一个静态库框架模板: iOS Universal Framework Mk 7

项目地址: https://github.com/kstenerud/iOS-Universal-Framework 这是一个Xcode 4使用的项目模板,而不是一个新的开源框架。 这是项目主页,介绍...
  • kmyhy
  • kmyhy
  • 2012-03-19 15:57
  • 18796

一个静态库框架模板: iOS Universal Framework Mk 7

http://blog.csdn.net/kmyhy/article/details/7369354 项目地址: https://github.com/kstenerud/iOS-Univers...
  • xyxjn
  • xyxjn
  • 2014-01-15 23:09
  • 891
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)