FreeMarker常用语法学习
1.API网址
http://freemarker.sourceforge.net/docs/
2.一个Table的例子
- freemarker 对表格的控制
- 这里将所有需要在一个区域显示到数据全部add到一个叫做zbj的list中了
- <#assign a2=zbj> -->将list zbj赋值给a2,这里也应该判空的...
- <#if zbj?exists>
- <#list 0..zbj?size-1 as a1> -->从0--->zbj?size-1循环,此时可以将数据全部循环一边
- <#if a1%(4*ldList?size)==0> <tr></#if> -->模板语言支持运算符操作在这里用到了取余判断并写<tr>
- <td height="23"><input type="text" size="7" id="input1" value=${a2[a1]} name="alldata"/></td> -->写数据
- </#list>
- </#if>
- freemarker有一个内置函数叫做chunk,没有试出来,才做了这样的处理,应该chunk更能方便到将数据制作成需要到格子吧....
3.常用语法
- =======常用语法==========
- 三.
- EG.一个对象BOOK
- 1.输出 ${book.name}
- 空值判断:${book.name?if_exists },
- ${book.name?default(‘xxx’)}//默认值xxx
- ${ book.name!"xxx"}//默认值xxx
- 日期格式:${book.date?string('yyyy-MM-dd')}
- 数字格式:${book?string.number}--20
- ${book?string.currency}--<#-- $20.00 -->
- ${book?string.percent}—<#-- 20% -->
- 插入布尔值:
- <#assign foo=ture />
- ${foo?string("yes","no")} <#-- yes -->
- =============逻辑判断===========
- 2.
- a:
- <#if condition>...
- <#elseif condit
- inc 发布于2007-09-08 16:18:57
- ion2>...
- <#elseif condition3>......
- <#else>...
- 其中空值判断可以写成<#if book.name?? >
- </#if>
- b:
- <#switch value>
- <#case refValue1>
- ...
- <#break>
- <#case refValue2>
- ...
- <#break>
- ...
- <#case refValueN>
- ...
- <#break>
- <#default>
- ...
- </#switch>
- ========循环读取==========
- 3.
- <#list sequence as item>
- ...
- </#list>
- 空值判断<#if bookList?size = 0></#list>
- e.g.
- <#list employees as e>
- ${e_index}. ${e.name}
- </#list>
- <#if mole?default(0)!=0>
- =============用来压缩空白空间和空白的行========
- 用例
- <#assign x = " moo ">
- (<#compress>
- 1 2 3 4 5
- ${moo}
- test only
- I said, test only
- )
- 输出
- (1 2 3 4 5
- moo
- test only
- I said, test only)
- =======Sequence内置的计数器=======
- 3. Sequence内置的计数器: xxx_index
- 用途:显示序号
- 模板:
- <#list employees as e>
- ${e_index}. ${e.name}
- </#list>
- 输出:
- 1. Readonly
- 2. Robbin
- =======Sequence内置的分段器==============
- 4. Sequence内置的分段器: chunk
- 用途:某些比较BT的排版需求
- 模板:
- <#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']>
- <#list seq?chunk(4) as row>
- <ul>
- <li><#list row as cell>${cell} </#list></li>
- </ul>
- </#list>
- <#list seq?chunk(4, '-') as row>
- <tr>
- <td><#list row as cell>${cell} </#list></td>
- </tr>
- </#list>
- 输出:
- <ul>
- <li>a</li>
- <li>b</li>
- <li>c</li>
- <li>d</li>
- </ul>
- <ul>
- <li>e</li>
- <li>f</li>
- <li>g</li>
- <li>h</li>
- </ul>
- <ul>
- <li>i</li>
- <li>j</li>
- </ul>
- <tr>
- <td>a</td>
- <td>b</td>
- <td>c</td>
- <td>d</td>
- </tr>
- <tr>
- <td>e</td>
- <td>f</td>
- <td>g</td>
- <td>h</td>
- </tr>
- <tr>
- <td>i</td>
- <td>j</td>
- <td>-</td>
- <td>-</td>
- </tr>
- ==========.设置缺省格式指令setting ============
- <#setting number_format = "#"/>
- ${1.234}
- 输出1
- <#setting number_format="0.##">
- ${1.234}
- 输出
- 1.23
- ==========包含文件指令 include ============
- <#include "header.htm"/>
- ==========导入macros指令 import =======
- <#import "../macros/pagination.ftl" as pagination>
- ==========freemarker的list============
- Scalar String:${scalarString}
- Scalar Number:${scalarNumber}
- Object is:${scalarObject}
- List使用样例-List元素为Scalar对象:
- <#list scalarList as value0>
- Scalar List值:${value0}
- </#list>
- List使用样例-List元素为User对象:
- <#list userList as listUser>
- List对象User Id值:${listUser.userId}
- </#list>
- Map使用样例-Map Values元素为Scalar :
- <#list scalarMap?keys as mykey>
- Scalar Map key is :${mykey}
- Scalar Map value is:${scalarMap[mykey]}
- </#list>
- Map使用样例-Map Values元素为User对象:
- <#list userMap?keys as key1>
- <#assign mapUser="${userMap[key1]}" >
- User Object is :${mapUser}
- <#--
- 以下方法有问题
- User is :${mapUser.userId} <br>
- -->
- </#list>
- =======FreeMarker中list排序=======
- 升序:
- <#list list?sort_by("time") as v>
- </#list>
- 降序:
- <#list list?sort_by("time") as v>
- </#list>
- ========freemarker在模板中定义变量=======
- 在模板中定义的变量有三种类型:
- plain变量:可以在模板的任何地方访问,包括include指令插入的模板,使用assign指令创建和替换
- <#include "/WEB-INF/index/top.html">
- =======freemarker.properties配置=========
- (1)解决输出中文乱码问题:
- default_encoding=UTF-8
- locale=zh_CN
- number_format=#
- (2)提高freemarker的性能
- template_update_delay=60000
- (3)freemarker的标签种类:
- ${..}
- # 代表是FTL tags
- <#if ...></#if>
- <#list totalList as elementObject>...</#list>
- @ ,代表用户自定义的标签
- <#-- --> 注释标签,注意不是<!-- -->
- ==============将图片整除换行====== <#if (u_index+1)%4=0>当图片超过五个就换行=======
- <table width="100%">
- <tr>
- <td><table width="100%">
- <tr>
- <#if map["最新-图片"]?exists>
- <#list map["最新-图片"] as u>
- <#if (u_index+1)%4=0>
- <td><table width="70" height="65" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td align="center" valign="middle" bgcolor="#6F7074">
- <a target="_blank" href="shownews.page?id=${u.id?default("")}&mole=2 "><img src="${u.chartpath?default('')}" width="67" height="41" border="0" /></a></td>
- </tr>
- <tr>
- <td align="center" bgcolor="#6F7074">
- <a target="_blank" href="shownews.page?id=${u.id?default("")}&mole=2 " class="tableff">
- <@jf.greet title=u.title len=4 /></a>
- </td>
- </tr>
- </table></td></tr><tr >
- <#else>
- <td><table width="70" height="65" border="0" cellpadding="0" cellspacing="0">
- <tr>
- <td align="center" valign="middle" bgcolor="#6F7074">
- <a target="_blank" href="shownews.page?id=${u.id?default("")}&mole=2 "><img src="${u.chartpath?default('')}" width="67" height="41" border="0" /></a></td>
- </tr>
- <tr>
- <td align="center" bgcolor="#6F7074">
- <a target="_blank" href="shownews.page?id=${u.id?default("")}&mole=2 " class="tableff">
- <@jf.greet title=u.title len=4 /></a>
- </td>
- </tr>
- </table></td>
- </#if>
- </#list>
- </#if>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </tr>
- </table></td>
- </#if>
- </#list>
- </#if>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- =================freemarker中在application
- ${Application.web_title}
- 在类里:
- list=dser.indexvideo(cvo);
- if(list.size()!=0){
- map.put("最新",list);}
- 在html静态页里:
- <#import "/WEB-INF/ftl/index.ftl" as jf>
- (index.ftl
- <#macro greet title len>
- <#if title?length != 0>
- <#if (title?length>len)>
- ${title[0..len-1]} <#else>
- ${title?trim}
- </#if>
- <#else>
- ${title?default("")}
- </#if>
- </#macro>
- <#--时间比较-->
- <#macro vstime start end>
- <#if start?default("")==""||end?default("")=="">
- --
- <#else>
- <#assign starts=start?replace("-","") >
- <#assign ends=end?replace("-","") >
- <#if (starts?number>ends?number)>
- <font color="red">以过期</font>
- <#else>
- 未过期
- </#if>
- </#if>
- </#macro>
- )
- <#if map["最新"]?exists>
- <#list map["最新"] as u>
- ${u.filepath?default('')}
- <@jf.greet title=u.title len=6 />
- </#list></#if>
FreeMarker常用语法学习的更多相关文章
- Markdown常用语法学习
Markdown常用语法学习,这些就够用了. 演示地址: https://github.com/YalongYan/Markdown-- 特别提示: 标题'##'后面必须加一个空格,否则编译不对.# ...
- FreeMarker常用语法
转自:http://www.cnblogs.com/linjiqin/p/3388298.html FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{exp ...
- es6常用语法学习笔记
1.let和const的常规使用 let声明的变量不存在预解析 let声明的变量不允许重复使用(在同一个作用域内) ES6引入了块级作用域{},块内部定义的变量,在外部是不可以访问到的 使用let在f ...
- Markdown 常用语法学习(stackedit)
Welcome to StackEdit!{#welcome} ===================== Hello, I am your first Markdown document withi ...
- Angular学习资料大全和常用语法汇总(让后端程序员轻松上手)
前言: 首先为什么要写这样的一篇文章呢?主要是因为前段时间写过一些关于Angualr的相关实战文章,有些爱学习的小伙伴对这方面比较感兴趣,但是又不知道该怎么入手(因为认识我的大多数小伙伴都是后端的同学 ...
- vue学习(一)ES6常用语法
1 ES6常用语法 1.1 变量提升 例① # 变量提升 <div id="app"> </div> <script> console.log( ...
- Markdown通用的常用语法说明
前言 Markdown 是一种轻量级的 标记语言,语法简洁明了.学习容易,还具有其他很多优点,目前被越来越多的人用来写作使用. Markdown具有一系列衍生版本,用于扩展Markdown的功能(如表 ...
- Sql常用语法以及名词解释
Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...
- Git版本控制软件结合GitHub从入门到精通常用命令学习手册(转)
简要参考:http://www.tuicool.com/articles/mEvaq2 http://gitref.org/zh/index.html GIT 学习手册简介 本站为 Git 学习参考手 ...
随机推荐
- Python学习日志9月13日
昨天的学习日志没有写,乱忙了一整天,政治电脑. 好奇心重,想要给电脑装上传说中LInux操作系统,各种小问题折腾到半夜,今天又折腾到晚上才真正的装上系统. 可是装上系统后又发现各种的不好用.虽然界面比 ...
- Session 机制和 Cookie 机制
Session 机制和 Cookie 机制 HTTP协议是无状态的, 而Cookie和Session都是在无状态的基础上希望实现有状态的效果, 两者是在客户端或者是服务端使用缓存等手段来实现状态的维护 ...
- poj1338 Ugly Numbers 打表, 递推
题意:一个数的质因子能是2, 3, 5, 那么这个数是丑数. 思路: 打表或者递推. 打表: 若该数为丑数,那么一定能被2 或者3, 或者5 整除, 除完之后则为1. #include <ios ...
- CSS3与弹性盒布局
1.弹性盒布局对齐模式 1.1.弹性盒子 在规定弹性盒子之中的子级元素换行显示之前父级元素必须是弹性盒子模型,也就是设置 display 为 flex 代码如下: <!DOCTYPE html& ...
- for..in...时,注意hasOwnProperty验证
for..in...时,注意hasOwnProperty验证 var obj = { a: 10, b: 20 }; // 注意词句代码 Object.prototype.c = 30; var it ...
- 在行列都排好序的矩阵中找数 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一 列都是排好序的。实现一个函数,判断K 是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返 回false。 【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。
从对角考虑 package my_basic.class_3; /** * 从对角开始 */ public class Code_09_FindNumInSortedMatrix { public s ...
- SSH中的jar包讲解
我们在搭建SSH框架的时候,需要引入各自的一些jar包 首先,先来看一下我们使用的SSH的各自版本及引入的jar包. struts2.3.1.2: struts2-core-2.3.1.jar j ...
- javaEE(2)_http协议
一.HTTP协议简介 1.客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式.dos环境下可直接通过telnet ...
- PAT 乙级 1012
题目 题目地址:PAT 乙级 1012 思路 最后一个测试点怎么也过不了,问题在于A2的判断,不能单纯地以0作为判断条件:假设满足A2条件的只有两个数6和6,计算结果仍然是0,但是输出A2的值是0不是 ...
- 利用Resttemplate进行put请求
开发中,最常用的是post.get这两种.今天我给大家展示一个利用put请求的demo,其实put请求跟post请求没啥区别,但是没有返回值. void put(String var1, @Nulla ...