有关freemarker的语法,循环,逻辑

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>

=====================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>

时间: 2024-07-30 22:21:15

有关freemarker的语法,循环,逻辑的相关文章

FreeMarker基本语法

FreeMarker单独使用的几率比较小,但是它的语法的确简单,用起来比较方便,这次整理了点这方面的资料拿出来分享 1.普通的变量 这是最简单的情况,直接${变量名称} ,如${name} 需要注意的是有的变量是需要转义的如双引号 2.遍历List集合 这个是用的最多的,必须掌握 <#list ["克里斯埃文斯", "斯嘉丽约翰逊", "小罗伯特唐尼"] as x> ${x} </#list> 此外,迭代集合对象时,还包含

网页静态化解决方案-Freemarker demo+语法

1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息,这样的情况同样也适用于使用网页静态化来解决. 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据.另外网页静态化还有利于SEO. 另外我们如果将

Freemarker 常见语法大全

FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} ------插值格式化(通用.数字.日期)${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name?default(‘xxx’)}//默认值xxx ${book.name!"xxx"}//默认值xxx ${book.date?string('yyyy-MM-dd')} //日期格式 ${book?str

FreeMarker常用语法

转自:http://www.cnblogs.com/linjiqin/p/3388298.html FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name?default(‘xxx’)}//默认值xxx ${book.name!"xxx"}//默认值xxx ${book.date?string('yy

FreeMarker常用语法学习

1.API网址 http://freemarker.sourceforge.net/docs/ 2.一个Table的例子 [html] view plaincopy freemarker 对表格的控制 这里将所有需要在一个区域显示到数据全部add到一个叫做zbj的list中了 <#assign a2=zbj> -->将list zbj赋值给a2,这里也应该判空的... <#if zbj?exists> <#list 0..zbj?size-1 as a1>    

freemarker常见语法大全

FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断如果存在,就输出这个值 ${book.name?default('xxx')}//默认值xxx ${book.name!"xxx"}//默认值xxx ${book.date?string('yyyy-MM-dd')} //日期格式 ${book?string.number} 20 //三种不同

ORACLE应用调优:请避免SQL做大量循环逻辑处理

前阵子遇到一个案例:一个同事说以前一个运行很正常的包,突然间比以前慢了很多,执行时间非常长,晚上的作业调用这个包跑了几个小时也没有跑出数据.于是我在跟踪.优化过程中定位到包中一个存储过程的一段SQL,我将原SQL简化了一下(对应的表名.函数全都随机取名替换掉),大体如下所示,在一个游标中,循环更新表TMP_JO_ORDERS, 其中需要通过函数获取一些值,这些值用来更新目标表的字段值 FOR CUR_JO IN (SELECT JOB_ORDER_NO FROM TMP_JO_ORDERS WH

swift 2.0 语法 循环

//: Playground - noun: a place where people can play import UIKit /*: for循环 * 基本用法和OC一致 * 条件表达式必须是bool类型的值 * 条件表达式的()可以省略 * 在OC中如果{}中只有一条语句, 那么{}可以省略, 而Swift不可以 */ for var i = 0; i < 10; i++ { print(i) } /*: 区间 半闭区间: 0..<10  包含头不包含尾 闭区间:   0...10  包

python基础语法 - 循环

while循环: while 条件: -- if 条件: continue # 条件满足跳过当次循环 if 条件 break # 条件满足中止循环 else: # 只有当while循环结束后,才会执行else下面的语句 -- 注意死循环 ctrl + c 退出循环 for循环: 原文地址:https://www.cnblogs.com/id19910408/p/8432204.html