FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

简介

FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境,FreeMarker更适合作为Model2框架(如Struts)的视图组件,可以在模板中使用JSP标记库,FreeMarker是免费的。

  • 循环list
<#list userList as user><#if userList_index ==0><!--第一个用户--></#if>
</#list><#--Freemarker遍历listt-->
<#list userList as user>用户名:${user.userName}密  码:${user.userPassword}年  龄: ${user.age}
<#if !user_has_next> <#--应用list隐含变量item_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>

freemarker不支持表达式的嵌套。
使用assign指令定义并设置

  • 复杂的list集合里面map,map里面套有list2集合,list2里面还有map
<#list productTypeCateList as middleMap><#list middleMap?keys as itemKey><tr><#if itemKey=="name">                    <td>${(middleMap[itemKey])!}</td>                  </#if>                  <#if itemKey=="categoryList">                  <#list middleMap[itemKey] as cateMap>                  <#list cateMap?keys as cateKey>                  <#if itemKey=="name">                  <td>${(cateMap[cateKey])!}</td>                  </#if>                  </#list>                  </#list>                                      </#if>                </tr>              </#list>
</#list>
  • 复杂list:list里有子list,子list里map
<#if userList? exists> <!--判断userList是否存在--><#list userList as list1>    <!--循环list取别名 list1--><#list list1 as childList>   <!--循环子list 取别名childList--><#if childList_index == 0> <!--判断是否第一条记录-->${childList.no}<#else>${childList.name}</#if></#list></#list>
</#if>
  • freemarker获取list的size
ArrayList<String> list = new ArrayList<String>();
${list?size}
  • list的遍历
<#list animals as being><tr><td>${being.name}${being.price}<td></tr>
</#list>
  • 遍历MAP
<#list map?keys as k><option value="${k}">${map[k]}</option>
</#list>
  • list遍历中的下标序号
<!-- _index是list的一个属性-->
<#list list as a>${a_index}
</#list>
  • 取list中第i个元素的值
${list[i]}
<!-- 嵌套时前面要有括号,如下,将字符串变成list,然后取第i个元素的值-->
${(str?split(","))[i]}
  • list的嵌套
<#list jsskList as jsskVO><#list kcList as kcVO><#if kcVO.kch=jsskVO.kch> <!--kcVO里有编号和名称,而jsskVO里只有编号-->${kcVO.kcm}</#if></#list>
</#list>
  • list排序
<!--升序 .sort_by()-->
<#list list?sort_by("字段") as x>
</#list>
<!--降序 .sort_by()?reverse-->
<#list list?sort_by("字段")?reverse as x>
</#list>
  • item_has_next,size使用
<#list userList as user><#if !user_has_next><!--共有${userList?size}最后一个用户是:${user.userName}--></#if>
</#list>

FreeMarker循环相关推荐

  1. Freemarker循环遍历

    循环格式 <#list 要循环的数据 as 循环后的数据> </#list> 循环的下标 通过,item_index获取 比如 <#list studentList as ...

  2. freemarker循环数字及取下标

    循环数字与循环集合的区别是循环集合是<#list arrayList as list >,循环数字是<#list 1..(max要循环的数字) as n别名 > 取当前循环的下 ...

  3. freemarker 循环map里面的对象形式List

    1.第一种:list里面嵌套一个map集合 java部分: // 重组数据并封装到list集合中 List<LinkedHashMap<String, String>> lis ...

  4. SpringBoot-Freemarker与SpringBoot集成

    本文将展示通过controller返回一个map,html页面上展示这个map里的内容,其中,map的key是用户(user)对象,map的value是该用户的多个订单(List<Order&g ...

  5. Java根据word 模板,生成自定义内容的word 文件

    处理思路: 将word模板以xml格式另存一份,得到xml格式模板 在xml 文件中,使用freemark标签,替换一些自定义值 使用freemark 解析xml ,输出到.doc 文件 在处理的时候 ...

  6. Java 将xml模板动态填充数据转换为word文档

    需要用到的jar包: commons-codec-1.10.jar freemarker-2.3.21.jar jacob-1.6.jar 实现思路: 1.先将word文档另存为 : Word 200 ...

  7. 中兴面试总结,华为。技术,市场

    1,软件测试,如何把这个测试做的更好. 进到一个新项目,作为测试人员应该都是想把测试做好,项目在符合客户质量要求的情况下按时交付的吧.但往往都事与愿违,造成这个结果的原因有很多很多.通过这段时间做自动 ...

  8. spring使用freemarker生成word文档包含表格、图片(循环插入)

    spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...

  9. java freemarker word导出 文字加图片双重循环 (经历无数坑)

    思路来源:https://blog.csdn.net/qq_41253573/article/details/83545536 本文章采用 freemarker 将word转xml再转ftl方法 引用 ...

最新文章

  1. 如何安装“散装版”(如自己开发的)插件到VSCode
  2. modbus报文解析实例_万字长文!春招面试总结,鹅厂T3Android高频面试真题+解析...
  3. 【机器学习】神经网络浅讲:从神经元到深度学习
  4. 通过xml 生成html页面,使用xmldom在服务器端生成静态html页面
  5. Ajax原理详细说明
  6. Git《二》时光机穿梭
  7. C#数组解决约瑟夫环问题
  8. 不锈钢厨房用品类织梦模板
  9. HTTP1.0 、 HTTP1.1、HTTP2.0的主要区别
  10. OpenAI对强化学习环境的汇总
  11. [数论]莫比乌斯反演入门
  12. 14.msql_python
  13. C语言水电管理系统,小区水电费管理系统C语言.doc
  14. win7装sql2000找不到服务器,WIN7 64位系统 SQL2000服务无法启动
  15. Mstar 方案白板书写加速
  16. 透彻理解神经网络剪枝算法
  17. Opencv 学习笔记(二)
  18. csgo笔记本党设置4:3画面
  19. 微信小程序实现拍照功能
  20. java 浏览器测试,【Java资源大全】Selenium:基于浏览器的测试套件

热门文章

  1. CCF NOI1012 变换密码
  2. 概率图模型(PGM) —— 贝叶斯网络(Bayesian Network)
  3. 数学公式的规约(reduce)和简化(simplify)
  4. 推理集 —— 特殊的工具
  5. scale data:线性空间映射
  6. STL 算法接口及用法说明 (二)
  7. C/C++ debug(三)
  8. Linux下c语言实现通讯录,学生通讯录管理系统linux下C语言
  9. python界面编程实例_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...
  10. 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码