FreeMarker循环

简介: FreeMarker循环

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>


相关文章
Springboot接口同时支持GET和POST请求
Springboot接口同时支持GET和POST请求
1365 0
|
2月前
|
存储 JSON 对象存储
零门槛玩转向量引擎!阿里云 Milvus 无代码全流程实操指南
阿里云Milvus版是企业级向量引擎,支持非结构化数据语义检索。全托管架构、开源兼容,助力智能驾驶、电商推荐、智能客服等场景实现毫秒级精准匹配,无代码操作让AI落地更高效。
336 0
|
资源调度 监控 前端开发
第七章(原理篇) 微前端技术之依赖管理与版本控制
第七章(原理篇) 微前端技术之依赖管理与版本控制
554 0
|
算法
雪花算法反思:订单ID生成的痛点与解决方案
雪花算法(Snowflake Algorithm)因其生成唯一ID的能力而被广泛应用于分布式系统中。然而,随着业务的发展和系统规模的扩大,一些隐藏的问题逐渐浮现。本文将探讨使用雪花算法生成订单ID后可能遇到的挑战,并提供相应的解决方案。
583 2
|
XML JSON 前端开发
深入对比TOML,JSON和YAML
坦率地说,在我开始与Hugo TOML合作之前,我感到羞耻是一个需要发现的新领域,但我对YAML和JSON非常熟悉。本文将帮助您了解如何通过不同的数据格式构建数据。       在Hugo中,您可以将所有这三种数据格式用于配置,前置事项和自定义数据,但TOML是用于整个项目的推荐格式。
10389 179
|
机器学习/深度学习 人工智能 PyTorch
深度学习长文|使用 JAX 进行 AI 模型训练
深度学习长文|使用 JAX 进行 AI 模型训练
|
数据可视化 Java BI
商业开源MES+源码+送可拖拽式数据大屏
这是一个商业开源的JAVA MES系统,包含源码和本地部署教程。基于Springboot、Vue3和MySQL8,适用于开发学习。功能包括车间数据建模、生产物料控制、计划管理、过程控制、质量管理、库存管理、看板管理、报表分析和基础管理。需JDK11、Tomcat及Maven环境,源码付费获取。
364 0
|
Oracle 安全 Java
最新Java JDK 21:全面解析与新特性探讨
最新Java JDK 21:全面解析与新特性探讨
921 0
最新Java JDK 21:全面解析与新特性探讨
|
SQL 存储 JavaScript
SAP HANA 详细介绍
SAP HANA 详细介绍
1886 0
|
Python
python第三方库torchnlp安装大坑
报错很奇怪,为啥我安装的是torchnlp,出现了没有匹配版本的torch。为此,我开始在网上寻找解决方法,竟然发现在没有人遇到这个错误???顿时觉得amazing,难道只有我安装不成功
410 0