一,符号的意义

1.0,单问号

 ?后面要加关键字,例如:<#if object?exists>object对象不为空</#if>

 <#if str??>${str?string}</#if><#--将str以字符串形式显示-->

 ${nowDate?time}<#--将现有时间以时间的格式显示,显示结果如:15:13:05-->

 ${nowDate?date}<#--以日期格式显示,如:2011-4-28-->(date的格式可以在freemarker.properties文件中配置)

单问号后面跟的是函数

其实?exists就相当于??

1.1,双问号

<#if orderParam.quliJycs?? && orderParam.quliJycs == '1'>已上传<#else>请上传</#if>

其中双问号意思就相当于 orderParam.quliJycs?exists 是否存在 ,判断为非空的,这句话的意思就是说如果orderParam.quliJycs存在并且值为1则是已上传。

1.1.1,三个问号

 ${(num.color)???string}

前连个问号是判断是否存在,后面一个问号是让它以String的类型输出

1.2,单个感叹号

 ${(user.name)!""}
 ${(user.name)!}
3,${user.name?default(‘xxx’)}//默认值xxx 
4 ${(user.name)!"默认值"}

第一行是说如果为空就让值为空

第二行就是如果为空不会报错

第三行则是如果为空则值为默认值

第三行和第四行的作用是一样的。

但是前提条件都是user对象不能为空,这句话主要针对的是它的值

1.3,双感叹号

${abc!!},<#list strList!! as str >

比如${list strList as str},如果strList不存在,则freemarker是会报错的
而如果加上<#list strList!! as str >,则freemarker就会对忽略掉空变量而不会报错

1.4,判断非空

1、if和”??“

<#if age??>

无年龄值

<#/if>

2、$和!

${age!'0'}

如果age为null,默认给'0'

二,循环语句的应用

2.1,if else 语句

 <#if student.studentAge lt 12>
       ${student.studentName}不是一个初中生
 <#elseif student.studentAge lt 15>
       ${student.studentName}不是一个高中生
 <#elseif student.studentAge lt 18>
       ${student.studentName}不是一个大学生
 <#else>
       ${student.studentName}是一个大学生
 </#if>
 <#if condition>...
 <#elseif condition2>...
 <#elseif condition3>......
 <#else>...
 </#if>

2.2,switch的应用

字符串

 <#switch being.size>
   <#case "small">
           This will be processed if it is small
           <#break>
   <#case "medium">
           This will be processed if it is medium
           <#break>
   <#case "large">
           This will be processed if it is large
           <#break>
   <#default>
           This will be processed if it is neither
 </#switch>  

数字

 <#switch x>
   <#case x = 1>
          1
   <#case x = 2>
          2
   <#default>
          d
 </#switch>  

格式

 <#switch value>
 <#case refValue1>
     ...
     <#break>
 <#case refValue2>
     ...
     <#break>
 ...
 <#case refValueN>
     ...
     <#break>
 <#default>
     ...
 </#switch> 

三,集合

2.1,集合的长度

 <#if student?size != 0></#if>  判断=的时候,注意只要一个=符号,而不是== 

2.2,遍历list集合

 User类
 public class User{
      private String username;
      private
    (省略set和get方法)
 }

 user.ftl
 <#--Freemarker遍历list-->
 简单遍历list:
 <#list userList as user>
    用户名:${user.userName}
    密  码:${user.userPassword}
    年  龄: ${user.age}
 </#list>

 <#--Freemarker遍历list并应用list隐含变量item_index-->
 item_index使用:
 <#list userList as user>
 第${user_index+1}个用户
    用户名:${user.userName}
    密  码:${user.userPassword}
    年  龄: ${user.age}
 </#list>

 <#--Freemarker遍历list并应用list隐含变量item_has_next-->
 item_has_next,size使用:
 <#list userList as user>
    用户名:${user.userName}
    密  码:${user.userPassword}
    年  龄: ${user.age}
    <#if !user_has_next>
    共有${userList?size}最后一个用户是:${user.userName}
 </#if>
 </#list>

 <#--Freemarker遍历list并按用户年龄升序排序-->
 按用户年龄升序排序:
 <#list userList?sort_by("age") as user>
    用户名:${user.userName}
    密  码:${user.userPassword}
    年  龄: ${user.age}
 </#list>

 <#--Freemarker遍历list并按用户年龄降序排序-->
 按用户年龄降序排序:
 <#list userList?sort_by("age")?reverse as user>
    用户名:${user.userName}
    密  码:${user.userPassword}
    年  龄: ${user.age}
 </#list>

 <#--Freemarker遍历list当用户年龄大于21岁时,停止输出-->
 list中应用break:
 <#list userList?sort_by("age")?reverse as user>
    用户名:${user.userName}
    密  码:${user.userPassword}
    年  龄: ${user.age}
    <#if (user.age>21) >
      <#break>
    </#if>
 </#list>

2.3,遍历map集合一

 假设selectDateModel 是我们后台返回的map<String, String>;

 <#list selectDateModel?keys as key>
   <option value="${key}">${selectDateModel[key]}</option>
 </#list>

2.4,遍历map集合二

 <#--freemarker map的应用-->
 <#--创建一个map,注意在freemarker中,map的key只能是字符串来作为key-->
 <#assign userMap={"1","刘德华","2":"张学友"}/>

 <#--获取map中的值-->
 ${userMap["1"]}

 <#--获取map的keys-->
 <#assign  keys=userMap?keys/>

 <#--遍历map 首选获取key的集合-->
 <#list keys as key>
   key:${key}-value:${userMap["${key}"]}
 </#list>
 </br>

 <#--直接遍历map的第二种方式-->
 <#list userMap?keys as key>
   key:${key}--value:${userMap["${key}"]}
 </#list>
 </br>

 <#--直接遍历map的values-->
 <#list userMap?values as value>
  ${value}
 </#list>

3,其它

3.1,判断null,""

  <#if object.param??&&object.param!="">${object.param!}<#else>请选择</#if>

常用的freemark语法(三)的更多相关文章

  1. PHP语法(三):控制结构(For循环/If/Switch/While)

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 本文我来总结几个PHP常用的控制结构,先来 ...

  2. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  3. Freemaker FTL指令常用标签及语法

    https://blog.csdn.net/pengpengpeng85/article/details/52070602 FTL指令常用标签及语法 注意:使用freemaker,要求所有标签必须闭合 ...

  4. 【知识库】-数据库_MySQL常用SQL语句语法大全示例

    简书作者:seay 文章出处: 关系数据库常用SQL语句语法大全 Learn [已经过测试校验] 一.创建数据库 二.创建表 三.删除表 四.清空表 五.修改表 六.SQL查询语句 七.SQL插入语句 ...

  5. FTL指令常用标签及语法

    FTL指令常用标签及语法注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析. freemaker注释:<#-- 注释内容 -->格式部分,不会输出 - ...

  6. JAVA中常用需要设置的三个环境变量(JAVA_HOME、CLASSPATH、PATH)

    JAVA中常用需要设置的三个环境变量: JAVA_HOME.CLASSPATH.PATH (一) 配置环境变量:(相对路径) 1. JAVA_HOME=x:/jdk1.6.0 2. 用%JAVA_HO ...

  7. linux下常用语言的语法检查插件整理

    linux下常用语言的语法检查插件 可以结合vim语法检查插件syntastic使用,具体请参考syntastic使用说明 如php,sql,json,css,js,html,shell,c等语法插件 ...

  8. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  9. Unit05: JavaScript对象概述 、 常用内置对象一 、 常用内置对象二 、 常用内置对象三

    Unit05: JavaScript对象概述 . 常用内置对象一 . 常用内置对象二 . 常用内置对象三 常用内置对象使用演示: <!DOCTYPE html> <html> ...

随机推荐

  1. BZOJ 3698: XWW的难题 [有源汇上下界最大流]

    3698: XWW的难题 题意:(1)A[N][N]=0:(2)矩阵中每行的最后一个元素等于该行前N-1个数的和:(3)矩阵中每列的最后一个元素等于该列前N-1个数的和.给A中的数进行取整操作(可以是 ...

  2. CF 375D. Tree and Queries【莫队 | dsu on tree】

    题意: 一棵树,询问一个子树内出现次数$≥k$的颜色有几种 强制在线见上一道 用莫队不知道比分块高到哪里去了,超好写不用调7倍速度!!! 可以用分块维护出现次数这个权值,实现$O(1)-O(\sqrt ...

  3. BZOJ 3265: 志愿者招募加强版 [单纯形法]

    传送门 一个人多段区间,一样.... 不过国家队论文上说这道题好像不能保证整数解.... #include <iostream> #include <cstdio> #incl ...

  4. iOS学习——布局利器Masonry框架源码深度剖析

    iOS开发过程中很大一部分内容就是界面布局和跳转,iOS的布局方式也经历了 显式坐标定位方式 --> autoresizingMask --> iOS 6.0推出的自动布局(Auto La ...

  5. CentOS 6.5 Web服务器搭建

    安装MySQL 首先,进入终端,输入 [root@localhost ~]# yum install mysql mysql-server 即可安装Mysql 按照成功以后,让MySQL随系统启动 [ ...

  6. java生产者与消费者模式

    前言: 生产者和消费者模式是我们在学习多线程中很经典的一个模式,它主要分为生产者和消费者,分别是两个线程, 目录 一:生产者和消费者模式简介 二:生产者和消费者模式的实现 声明:本例来源于java经典 ...

  7. Linux 6.4 设置yum 为centOS源

    一. 删除Redhat 自带的yum // root 用户执行 rpm -aq|grep yum|xargs rpm -e --nodeps 二 .下载CentOS 的 yum 安装文件 wget h ...

  8. 重磅发布:《阿里巴巴Android开发手册(规约)》

    1.前言 阿里巴巴于近日为广大程序员再送上重磅开春好礼:<阿里巴巴Android开发手册(规约)>.该开发规范在阿里内部经过了长期的修缮,现已总结成册,向所有移动开发者.技术爱好者开放,希 ...

  9. DxPackNet 1.打开摄像头

    好久没写博客了 ,这个系列将给大家介绍.net下一个非常好用的视频控件 ------ DxPackNet, 用这个控件大家可以轻松开发出 视频会议,视频监控,远程桌面,远程教学,远程白板,视频直播,视 ...

  10. 1.10 tuple 元组

    元组(tuple)属于不可变序列 tuple特性: 特性一:可包含任意对象的有序集合 特性二:通过下标索引访问元素 特性三:固定长度,异质,可任意嵌套 特性四:不支持原位改变 特性五:存储机制:对象引 ...