`
xiangxingchina
  • 浏览: 508724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

freemark中问题记录

阅读更多

>>问题处理  ${}

 

如果要在模板中出 ${aa}

 

解决:把“$”当特殊字符传递过来

 

 

>> 遍历循环

 

        <#if fs?exists> 
            <#list fs as field  >
                      <tr>
                            <td class="bmsInputCaption" width="25%" >${field.nameCn}</td>
                            <td class="bmsInputContent" width="75%" >

                                      <s:property value="${table}DTO.${field.nameEn}"/>

                             </td>         
                     </tr>  
           </#list>
      </#if>

 

>> list中基偶行问题

<#if bookMap?exists>
     <#list bookMap?keys as bookKey>
     <#if bookKey_index%2 = 0>
      <tr class="odd">
      <#else>
      <tr class="even">
      </#if>

>>获取list长度

<#if (post.attachments?size > 0)>

 

 

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

 

 

 

第一招:迭代Map
      假设你有一个Map,像这样:

Xml代码
  1. {"name":"mouse", "price":50 , "weight":30}  
{"name":"mouse", "price":50 , "weight":30}

 
如何来迭代输出?

Html代码
  1. < #-- 这里模拟了一个Map集合,定义了三对键值 -- >   
  2. < #assign  h  = {"name":"mouse", "price":50, "weight":30} >   
  3.   
  4. < #-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,  
  5. 从这里我们也可以学到如何去调用一个类的方法 -->   
  6. < #assign  keys  =  h ?keys >    
  7.   
  8. < #-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 -- >   
  9. < #list keys as key > ${key} = ${h[key]};  </ #list >   
<#-- 这里模拟了一个Map集合,定义了三对键值 -->
<#assign h = {"name":"mouse", "price":50, "weight":30}>

<#-- h?keys 将Map的key取出赋值,实质是调用了一个包装类的方法,
从这里我们也可以学到如何去调用一个类的方法 -->
<#assign keys = h?keys> 

<#-- 关键点:${h[key]} 通过这样的方式,访问到了Map中的value属性 -->
<#list keys as key>${key} = ${h[key]}; </#list>

 
输出结果:

Html代码
  1. name  =  mouse price  =  50 weight  =  30 ;   
name = mouse; price = 50; weight = 30; 

 

第二招:如何判定字符串相等
      这个有点小题大作,呵呵,其实很简单

Html代码
  1. < #-- 定义了一种动物——狗 -- >   
  2. < #assign  annimal  =  "Dog" >   
  3.   
  4. < #-- 做一下条件判断,如果是狗就输出"Wang! Wang!"  
  5. 注意:这里使用一个"="-->   
  6. < #if  annimal  =  "Dog" >   
  7. Wang! Wang!  
  8. < #else >   
  9. Ga! Ga!  
  10. </ #if >   
<#-- 定义了一种动物——狗 -->
<#assign annimal = "Dog">

<#-- 做一下条件判断,如果是狗就输出"Wang! Wang!"
注意:这里使用一个"="-->
<#if annimal = "Dog">
Wang! Wang!
<#else>
Ga! Ga!
</#if>

 

输出结果:

Html代码
  1. Wang! Wang!   
Wang! Wang! 

 

第三招:处理空值
      先要说明的是,在freemarker中,如果你试图去访问一个不存在的值(null),或者该值在访问时还没有被初始化,
那么它会毫不犹豫的抛给一个错误,并且立即终止模板的执行过程。为什么这么变态?

 

如何对付这样的情况?
答案:在它访问这个值失败的时候,给它一个默认的值!嘻嘻……

 

怎么赋默认值?
用这样的语法:
unsafe_expr!default_exprunsafe_expr!(unsafe_expr)!default_expr(unsafe_expr)!


例子:

Html代码
  1. < #-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"  
  2. 当然"!"后面的这个值可以是一个表达式-->   
  3. ${mouse!"No mouse."}  
  4.   
  5. < #-- 给mouse赋值 "Jerry" -- >   
  6. < #assign  mouse = "Jerry" >   
  7.   
  8. < #-- 再次访问mouse -- >   
  9. ${mouse!"No mouse."}  
<#-- 想要输出mouse,但是它没有被赋值,所以指定默认值为"No mouse"
当然"!"后面的这个值可以是一个表达式-->
${mouse!"No mouse."}

<#-- 给mouse赋值 "Jerry" -->
<#assign mouse="Jerry">

<#-- 再次访问mouse -->
${mouse!"No mouse."}

 

输出结果:

Html代码
  1. No mouse.  
  2. Jerry   
No mouse.
Jerry 

 

另外对于"!"后面没有写任何值的情况,那么它的值可能是空String、空sequence 、空hash。
但是如果你想默认值是0或者false,那么你最好还是显式的指定,因为它不会对你那么友好的(Bad luck!)

还需要注意的是:

Html代码
  1. 1. product.color!"red"   
  2. 2. (product.color)!"red"   
  3.   
  4. 这两种写法所表示的含义是不一样的:  
  5. 第一种写法只处理color为空的情况,对于product为空则束手无策。  
  6. 第二种写法则可以同时处理product及color同时(或任意)为空的情况。  
1. product.color!"red" 
2. (product.color)!"red" 

这两种写法所表示的含义是不一样的:
第一种写法只处理color为空的情况,对于product为空则束手无策。
第二种写法则可以同时处理product及color同时(或任意)为空的情况。

 

插播 ,如何判断空值?
语法:unsafe_expr?? 或 (unsafe_expr)?? 返回值为true和false

 

第四招:几个常用的函数
    使用函数的方式就像这样:user?upper_case 简单吧?

字符串函数:

html: 将会把一些特殊的html字符替换掉(比如:把 "<" 替换为"&lt;")

cap_first: 首字母大写
lower_case: 转化为小写
upper_case: 转化为大写
trim: 去掉首尾的空白,包括空格、Tab、回车、换行


例子:

Html代码
  1. < #-- 定义test值为"Tom & Jerry" -- >   
  2. < #assign  test  =  "Tom & Jerry" >   
  3. ${test?html}  
  4. ${test?upper_case?html}  
  5.   
  6. 输出为:  
  7. Tom & Jerry  
  8. TOM & JERRY   
<#-- 定义test值为"Tom & Jerry" -->
<#assign test = "Tom & Jerry">
${test?html}
${test?upper_case?html}

输出为:
Tom & Jerry
TOM & JERRY 

 

序列(也就是常说的List或Set等集合)函数:

size: 显示该序列的大小

 

数学函数:
        int: 取整(例如: -1.9?int 返回值是 -1)

 

  • 描述: 循环遍历相关代码
  • 大小: 30 KB
分享到:
评论

相关推荐

    freemark学习笔记

    freemark学习笔记:在阅读freemark官方文档的过程中记录下的一些笔记。包括自己对freemark的理解以及实践中的经验

    SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环

    (userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用&lt;#list table as map&gt;&lt;/#list&gt;,注意这里的&lt;#list&gt;&lt;/#list&gt;标签不要和某对其他标签交叉,不...

    lblog:Spring启动+ JPA + Freemark + bootstrap4

    lblog-新一代个人开源博客 线上地址: 效果展示 ...更新记录 详见 欢迎大家star&fork 有好的建议或意见可以联系我。 我的生产环境是nginx(反代)+tomcat+java8+mysql5.7(必须在5.5以上不包含5.5) in centos7

    freemarker笔记

    在学习freemarker时候,个人记录的笔记。用于常见标签的使用语法,以及嵌套标签的使用等。同时针对spring boot 编写了一套代码生成器。直接运行即可使用。具体地址:...

    易语言模块大全(374个)

    freemark模块_取文件.ec 取mdb表名.ec 频谱.ec 飛狐DLL.ec EdbServer1.0客户端.ec 读.xls文件到高级表格.ec 超级列表框交替色.ec 模拟按键.ec 黑客入侵模块 V1.00.ec 寻找磁盘文件模块 1.0.ec 线程类.ec 超级列表框...

    1345个易语言模块

    freemark 模块_取文件.ec ftp文件操作模块.ec gdiplus类模块.ec GetStringSize.ec GIF快 照.ec Hex-Dec.ec Hex-Dec1.ec Hex2Dec.ec hide.ec hotkey.ec HTTP.ec http_ec.ec http_ec1.ec HTTP 访问模块 .ec HTTP访问...

    1350多个精品易语言模块

    freemark 模块_取文件.ec ftp文件操作模块.ec gdiplus类模块.ec GetStringSize.ec GIF快 照.ec Hex-Dec.ec Hex-Dec1.ec Hex2Dec.ec hide.ec hotkey.ec HTTP.ec http_ec.ec http_ec1.ec HTTP 访问模块 .ec HTTP访问...

    易语言模块914个

    ACCSEE记录显示到超级列表框模块.ec ACSII加解密模块2.0.ec AD.ec ADO方式填充树型框.ec API操作模块.ec Base64编解码.ec BASE64编解码模块.ec Bios信息.ec BMP滤镜模块.ec BoyChong-神2多方式取IP模块.ec...

    2020易语言模块大全持续更新1.zip

    ACCSEE记录显示到超级列表框模块.ec ACSII加解密模块2.0.ec AD.ec ADO方式填充树型框.ec anchors.ec API操作模块.ec ASP网络验证商业模块2.3.ec Base64编解码.ec BASE64编解码模块.ec Bios信息.ec BMP滤镜模块.ec ...

    易语言模块大全(共775个模块)

    操作其它程序中的超级列表框1.0(1.0).zip 查找窗口内所有组件句柄(1.0).zip 查杀程序(1.0).zip 磁盘操作(1.0).zip 超级列表快速排序(2.0).zip 超级列表框补丁1.0(1.0).zip 传奇世界登陆模块(1.9).zip 磁性窗口模块V...

    易语言700模块打包

    操作其它程序中的超级列表框1.0(1.0).zip 查找窗口内所有组件句柄(1.0).zip 查杀程序(1.0).zip 磁盘操作(1.0).zip 超级列表快速排序(2.0).zip 超级列表框补丁1.0(1.0).zip 传奇世界登陆模块(1.9).zip 磁性...

    1000个【易语言模块大全汇总批量下载】

    2005-10-21 15:30 4303 1500 易语言模块大全\ACCSEE记录显示到超级列表框模块.ec 2005-10-21 15:30 7198 2077 易语言模块大全\ACSII加解密模块2.0.ec 2005-10-21 15:30 25389 8592 易语言模块大全\AD.ec 2006-07-20 ...

    E语言1000模块

    2005-10-21 15:30 4303 1500 易语言模块大全\ACCSEE记录显示到超级列表框模块.ec 2005-10-21 15:30 7198 2077 易语言模块大全\ACSII加解密模块2.0.ec 2005-10-21 15:30 25389 8592 易语言模块大全\AD.ec 2006-07-...

    易语言模块大全汇总批量下载

    2005-10-21 15:30 4303 1500 易语言模块大全\ACCSEE记录显示到超级列表框模块.ec 2005-10-21 15:30 7198 2077 易语言模块大全\ACSII加解密模块2.0.ec 2005-10-21 15:30 25389 8592 易语言模块大全\AD.ec 2006-07-20 ...

Global site tag (gtag.js) - Google Analytics