freemarker学习笔记 空值 及数据处理

最近学习了一下Freemarker对于大型门户来说,日访问量如果上万的话,首页内容比较多的话,优化方法除了采用连接池、Css Sprite、Js压缩之外,非常有必要对首页进行静态化的处理,使用Struts2就会接触到Freemarker这个非常好用的静态化工具,搞了半天终于把现在进行的首页进行全静态化。下次再把Freemarker的源码通读一遍
Freemarker学习笔记:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1) 空值Null配置处理
a.通过Configuration设置。Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);//设置属性
b.通过Eviroment设置。
   Environment env = template.createProcessingEnvironment(root, out);
   env.setClassicCompatible(true);
c.通过ftl设置:在ftl前加入<!--#setting classic_compatible=true-->
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2) 空值Null判断
${(category.parentCategory.id)!0}   加括号代表category, category.parentCategory, category.parentCategory.id这三个都会进行判断;  不加括号只判断category.parentCategory.id是否为null
<#if list?exists && list.size != 0 >
空值判断:${book.name?if_exists },
${book.name?default(‘xxx’)}//默认值xxx
${ book.name!"xxx"}//默认值xxx
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3) 时间格式化显示
<#assign datetimeformat="yyyy-MM-dd HH:mm:ss zzz">
<lastBuildDate>${date?string(datetimeformat)}</lastBuildDate>
<pubDate>${date?string(datetimeformat)}</pubDate>

数字格式:${book?string.number}--20
${book?string.currency}--<#-- $20.00 -->
${book?string.percent}—<#-- 20% -->
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
4) 字符串截取substring,注意substring中括号的位置
<#if res1.NAME?length<12>
${res1.NAME}
<#else>
${res1.NAME?substring(0,12)}
</#if>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
5) String内置的JavaScript转换: js_string
用途:用于JavaScript转义,转换',",换行等特殊字符
模板:
<script>
alert("${errorMessage?js_string}");
</script>
输出:
<script>
alert("Readonly\'s pet name is \"Cross Bone\"");
</script>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
6) 内置的默认值处理:default
用途: 用于处理默认值
模本:
User: ${userLogin.name?default("Anonymous")}
<td>${(employee.department.manager.name)?default(" ")}</td>

输出:
User: Anonymous
<td> </td>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
7) Sequence内置的计数器: xxx_index
用途:显示序号
模板:
<#list employees as e>
${e_index}. ${e.name}
</#list>

输出:
1. Readonly
2. Robbin
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8) 插入布尔值:
<#assign foo=ture />
${foo?string("yes","no")} <#-- yes -->
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9) 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>  // 不够4个的以“-”填充
<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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeMarker中,有几种处理空值的方法。首先,可以使用判断标签来判断变量是否存在,并根据情况输出或不输出相应的内容。例如,可以使用`${user.name?if_exists}`来判断`user.name`是否存在,如果存在则输出,反之则不输出。另外,可以使用`${user.name!default("默认值")}`或`${name!"默认值"}`来判断存在与否,并根据情况输出相应的值或默认值。此外,还可以使用`${datename?string('yyyy-MM-dd')}`来格式化日期。\[1\] 另一种处理空值的方法是使用`escape`和`noescape`标签。通过这两个标签,可以对所有的变量进行空值处理。可以设置默认值,将空值替换为默认值,或者不进行处理。例如,使用`<#escape x as x!"默认值"><span>账号</span>${user.id}<span>姓名</span>${user.name}</#escape>`来设置默认值,或者使用`<#noescape><span>账号</span>${user.id}<span>姓名</span>${user.name}</#noescape>`来对空值不进行处理。\[2\] 此外,还可以通过属性配置的方法来处理空值。可以在类路径下添加`freemarker.properties`文件,并在其中配置`classic_compatible=true`。或者通过`freemarker.template.Configuration`的`config.setClassicCompatible(true)`方法来设置。另外,在ftl文件内引入`<!--#setting classic_compatible=true-->`也可以实现相同的效果。\[3\] 综上所述,FreeMarker中处理空值的方法有多种,可以根据具体情况选择适合的方法来处理空值。 #### 引用[.reference_title] - *1* *2* [freemarker空值处理解决方案](https://blog.csdn.net/wdehxiang/article/details/77772356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [四种处理freemarker空值的方法](https://blog.csdn.net/weixin_33790053/article/details/92931783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值