assign  用于为该模板页面 创建或替换一个顶层变量 或创建或替换多个顶层变量 列子如下

<#assign name=value [in namespacehash]>,指定一个名为name的变量,变量值为value, in子句用于将创建的name变量放入namespacehash命名空间中

<#assign name[in namespacehash]>capture this</#assign>

<#assign x>

<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>

${n}

</#list>

</#assign>

${x}  输出:星期一 星期二 星期三 星期四 星期五 星期六 星期天

macro 用户自定义指令 用@符号调用 列子如下

<#macro greet>

  <font size="+2">Hello Joe!</font>

</#macro>

使用:<@greet></greet>或<@greet/>

结果:<font size="+2">Hello Joe!</font>

参数-在macro指令中可以在宏变量之后定义参数  
例二:  
<#macro greet person>  
<font size="+2">Hello ${person}!</font>  
</#macro>  
使用:<@greet person="Fred"/> and <@greet person="Batman"/>  
结果: <font size="+2">Hello Fred!</font> and <font size="+2">Hello Batman!</font>

......

${..}只能用于文本部分,不能用于表达式

错误示范: <#if ${isA}>A</#if> 或 <#if "${isA}">A</#if>

应该写成: <#if  isA>A</#if>

Map链接运算符

Map对象的连接运算符也是将两个Map对象连接成一个新的Map对象,Map对象的连接运算符是+,如果两个Map对象具有相同的key,则右边的值替代左边的值.看如下的例子如下: 
<#assign scores = {"语文":86,"数学":78} + {"数学":87,"Java":93}> 
语文成绩是${scores.语文} 
数学成绩是${scores.数学} 
Java成绩是${scores.Java} 
输出结果是: 
语文成绩是86 
数学成绩是87 
Java成绩是93

if指令

这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: 
<#if condition>... 
<#elseif condition>... 
<#elseif condition>... 
<#else> ... 
</#if>

例子如下: 
<#assign age=23> 
<#if (age>60)>老年人 
<#elseif (age>40)>中年人 
<#elseif (age>20)>青年人 
<#else> 少年人 
</#if> 
输出结果是:青年人

由于FreeMarker会将>符号当成标签的结束字符,可能导致程序出错,为了避免错,使用括号(age>60)

switch,case,default,break指令

这些指令虽然是分支指令,作用类似于Java的switch语句

switch指令的语法结构

<#switch value>

<#case refValue>...</#break>

<#case refValue>...</#break>

<#default>...

</#switch>

list, break指令

list指令是一个迭代输出指令,用于迭代输出数据模型中的集合,list指令的语法格式如下:

<#list sequence as item> ... 
</#list>

sequence是一个集合对象,也可以是返回一个集合对象的表达式,item是一个任意的名字,指被迭代输出的集合元素,迭代集合对象时,还包含两个特殊的循环变量:

item_index:当前变量的索引值

item_has_next:是否存在下一个对象

也可以使用<#break>指令跳出迭代

例子如下:

<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>

${x_index+1}.${x}

<#if x_has_next>,</if>

<#if x="星期四"><#break></#if>

</#list>

freemarker0的更多相关文章

随机推荐

  1. apk签名相关文章

    签名详解:https://stackoverflow.com/questions/4245303/android-sf-file 使用不同的keystore,签名后生成SF文件一模一样正常吗? 正常 ...

  2. java 动态代理(模式) InvocationHandler(为类中方法执行前或后添加内容)

    动态代理属于Java反射的一种. 当我们得到一个对象,想动态的为其一些方法每次被调用前后追加一些操作时,我们将会用到java动态代理. 下边上代码: 首先定义一个接口: package com.liu ...

  3. ubuntu——printk()函数总结,关于日志文件

    我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况. 对程序的调试起到了很重要的作用. (下文中的日志级别和控制台日志控制级别 ...

  4. 正则表达式总结 java 等

    这个经常用的到,就来总结一下 #一下是JAVA中的正则表达式 在 JDK1.4 里有了自己的正则表达式 API 包,JAVA 程序员可以免去找第三方提供的正则表达式库的周折了,我们现在就马上来了解一下 ...

  5. 重要:Linux下IDE--KDevelop (用来跟踪调试C++) Ubuntu下QT4开发环境的搭建及初体验

    Linux下安装Qt4有两大问题,一是环境变量,二是IDE(集成开发环境).安装Qt4也有两种方法,一种是apt-get,一种是下载源码包,而后 一种方法已经人证实是最有可能不好使的方法.所以我最终采 ...

  6. 【laravel54】composer install与composer update的区别

    1.基础概念: 我们需要明白laravel项目里面有2个配置文件,composer.json和composer.lock文件,前者是下载的依赖包配置文件,后者是锁定的包版本信息. 使用之前,需要cd ...

  7. 转:【微信小程序】 微信小程序-拍照或选择图片并上传文件

    调用拍照API:https://mp.weixin.qq.com/debug/wxadoc/dev/api/media-picture.html?t=20161222#wxchooseimageobj ...

  8. 【C语言】二维数组中的查找,杨氏矩阵

    //二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都依照从左到右的递增的顺序排序.每列都依照从上到下递增的顺序排序. //请完毕一个函数.输入这种一个数组和一个数,推断数组中是否包括这个数. ...

  9. 扩展GeoServer数据源

    今天我们来讲讲怎么扩展GeoServer(简称GS)的数据源.大家都知道,GS支持多种数据源,而且都提供了友好的界面供操作.下面我们就来简单介绍一下,如何把自定义的数据源增加到GS中,让我们可以在统一 ...

  10. C++ 简单的日志类

    用法如下: #include "EasyLog.h" int main(){ EasyLog::Inst()->Log("Run..."); } 不只是m ...