freemaker学习记录
为什么突然要学这个呢。因为看到知乎上一个笑话(作者justjavac):
朋友介绍的。有一年 Java 经验,来了先试用吧。当时有一个海事局的项目需要做个页面,显示监测数据。虽然东南沿海 24 个基站每秒有几个 G 的数据,但是数据我已经处理好了,只需要页面显示。 于是交给他了。 “来,你用 JSP 做个简单页面,包括登陆和数据显示。” “JSP 我不会。之前直接学的 SSH。” 当时我心里就打鼓了,“那就用 SSH 做吧”。 果然,一直到下班,连个登录都没做出来。 “这个有那么难吗?你之前的项目都是怎么做的啊?” “我之前做的都是大项目,没做过这么小的。”
事实上,虽然一直在用java做服务端开发,但是由于分工,最前也只做到提供External接口为止,前端则是分离独立开发部署的。
如果做一个小东西也来这套前后端分离就太折腾了,于是打算补一下jsp,然后所幸偷懒到底用springboot了。 =_=||
内容来自:http://freemarker.foofun.cn/dgui_quickstart_basics.html
数据模型
数据模型与Java的POJO对象对应。可以当为空时给出默认值,使用方法如:${user!"visitor"},${latestProduct.url},
(root) | +- user = "Big Joe" | +- latestProduct | +- url = "products/greenmouse.html" | +- name = "green mouse"
还可以使用map和list这样的数据结构 如animals[0].name, misc.fruits[0]
(root) | +- animals | | | +- (1st) | | | | | +- name = "mouse" | | | | | +- size = "small" | | | | | +- price = 50 | | | +- (2nd) | | | | | +- name = "elephant" | | | | | +- size = "large" | | | | | +- price = 5000 | | | +- (3rd) | | | +- name = "python" | | | +- size = "medium" | | | +- price = 4999 | +- misc | +- fruits | +- (1st) = "orange" | +- (2nd) = "banana"
指令
if指令
<h1>
如果不为空..
<#if user??><h1>Welcome ${user}!</h1></#if>
<#if animals.python.price == animals.elephant.price> Pythons are cheaper than elephants today. <#else> Pythons are not cheaper than elephants today. </#if> </h1>
list指令,数据结构见上文。
<table border=1>
<#list animals as animal>
<tr><td>${animal.name}<td>${animal.price} Euros
</#list>
</table>
上面的写法,当list为空时,会输出一个空的table,为了避免,可以如下写法:
<#list animals> <ul> <#items as animal> <li>${animal} </#items> </ul> </#list>
<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, <#else>None</#list>
使用分隔符,可以使用<#sep>,处理空list时可以使用<#else>处理,联合使用如下:
<#list misc.fruits> <p>Fruits: <ul> <#items as fruit> <li>${fruit}<#sep> and</#sep> </#items> </ul> <#else> <p>We have no fruits. </#list>
include 指令
如<#include "/copyright_footer.html">
内建函数
user?html
给出 user
的HTML转义版本, 比如 &
会由 &
来代替。
fruits?join(", ")
通过连接所有项,将列表转换为字符串, 在每个项之间插入参数分隔符(比如 "orange,banana")