Apache FreeMarker 用法拾零

上次使用 Apache 的 FreeMarker 已是一年半前,现在又有页面需要生成,翻了翻原来项目里的模板,语法基本忘光。而且只做了如何简单使用的笔记,这次就把最常用的一些语法也写一写,以便备用,翻手册范围太广。

list 集合最常用

<ul>
<#list productList as product>
    <li>${product_index+1} ${product.goodsName}</li>
</#list>
</ul>

<!--需要排序时,加个sort_by字段-->
<ul>
<#list productList?sort_by("productName") as product>
    <li>${product_index+1} ${product.goodsName}</li>
</#list>
</ul>

<!--如果list集合不存在,直接在循环里加个else即可,不需要单独做判断-->
<#list sequence as item>
    Part repeated for each item
<#else>
    Part executed when there are 0 items
</#list>

<!--项目的个数-->
${list?size}

productList 是从后台传递过来的list集合;
product_index 用于获取当前索引,从0开始;

非空判断怎么判?

<#if goodsName??>
  goodsNamefound
<#else>
  No goodsName found
</#if>

?? 两个问号神写法!

上面的示例用到了if,那么多重判断怎么判,多个 if 吗,不需要!

<#if goodsName??>
  goodsNamefound
<#elseif goodsName=='aaa' >
aaa
<#else>
  No goodsName found
</#if>

如果某个对象的某个属性没有赋值怎么办?

<!--没有赋值,可以设置默认值的,那就设置默认值吧!-->
${product.keysword!''}

默认值可以这样设置,太简洁了吧!

如果想让html标签原样展示怎么做?

${testString?html}

后面加个html轻松搞定。

字符串常用的处理方法

<!--转成大写-->
${testString?upper_case}

<!--转成大写并输出原始html-->
${testString?upper_case?html}

<!--字符串的长度-->
${user?length}

<!--首字母小写,在生成controller类似的class文件时非常有用-->
${testString?uncap_first}

<!--首字母大写 -->
${testString?cap_first}

在模板里定义一个变量,怎么定义?怎么使用?

<!--使用assign关键字定义-->
<#assign x=1 >
${x}

如果定义了一个含有特殊符号的变量,该怎么使用?

<!--定义中包含特殊符号{}-->
<#assign strleft="${">
<#assign strright="}">

//这一段比较特殊,是写在js里面的,原本是想表达 var model= m o d e l , 但 是 又 不 能 直 接 写 成 {model},但是又不能直接写成 model{model},这样在生成时,会被模板解析,所以需要换个写法;

var model = [[${strleft}model${strright}]];

有个date型的日期,直接写会报错,该如何展示?

${significance.publishDate?string("yyyy-MM-dd")}

做分页,要遍历一个数字,怎么遍历?

<#if currentPage == 1 >
  <li class="previous_s"><a href="../sp/videoList.html" >上一页</a></li>
<#elseif currentPage gt 1 >
  <li class="previous_s"><a href="../sp/videoList${currentPage-1}.html" >上一页</a></li>
</#if>
<#list 0..pageSize-1 as page>
    <#if currentPage == page >
       <li class="pages_solid">${page+1}</li>
    <#elseif page == 0>
       <li class="pages_hollow"><a href="../sp/videoList.html" >${page+1}</a></li>
    <#else>
       <li class="pages_hollow"><a href="../sp/videoList${page}.html" >${page+1}</a></li>
    </#if>
</#list>
<#if currentPage lt pageSize-1  >
   <li class="next"><a href="../sp/videoList${currentPage+1}.html">下一页</a></li>
</#if>

为了防止大于号,小于号报错,大于号可以用 gt 代替,小于号可以用 lt 代替,很方便吧!

更多用法,参考官方文档:
https://freemarker.apache.org/
http://freemarker.foofun.cn/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeMarker是一种模板引擎,它可以帮助开发者将数据和模板进行关联,生成最终的文本输出。下面是FreeMarker用法: 1. 安装FreeMarker 可以通过Maven或手动下载的方式安装FreeMarker。 2. 准备数据模型 在使用FreeMarker前,需要将数据模型准备好。数据模型可以是Java对象、Map、List等。例如,我们可以创建一个Java对象,包含name和age属性: ``` public class Person { private String name; private int age; // getter and setter methods } ``` 然后创建一个Person对象: ``` Person person = new Person(); person.setName("John"); person.setAge(25); ``` 3. 准备模板 使用FreeMarker需要准备一个模板文件,模板文件中包含了需要填充数据的占位符。 例如,我们可以创建一个模板文件,包含${name}和${age}占位符: ``` Name: ${name} Age: ${age} ``` 4. 填充数据 在填充数据前,需要将数据模型和模板进行关联。 ``` Configuration cfg = new Configuration(Configuration.VERSION_2_3_28); cfg.setClassForTemplateLoading(getClass(), "/templates"); Template template = cfg.getTemplate("person.ftl"); ``` 其中,templates是模板文件所在的目录,person.ftl是模板文件的名称。 然后将数据模型和模板进行关联: ``` Map<String, Object> data = new HashMap<>(); data.put("person", person); Writer out = new OutputStreamWriter(System.out); template.process(data, out); out.flush(); ``` 其中,data是一个Map对象,包含了需要填充到模板中的数据。在模板中使用${person.name}和${person.age}可以获取到数据模型中的name和age属性。 5. 输出结果 最后,将填充好数据的模板输出到控制台或文件中: ``` Name: John Age: 25 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值