Freemarker指令语法

news2024/12/26 19:00:40

基础语法种类

1、注释,即<#-- -->,介于其之间的内容会被freemarker忽略

<#--我是一个freemarker注释-->

2、插值(Interpolation):即 . . 部分 , f r e e m a r k e r 会用真实的值代替 {..}部分,freemarker会用真实的值代替 ..部分,freemarker会用真实的值代替{…}

Hello ${name}

3、FTL指令:和HTML标记类似,名字前加#予以区分,Freemarker会解析标签中的表达式或逻辑。

<# >FTL指令</#>

4、文本,仅文本信息,这些不是freemarker的注释、插值、FTL指令的内容会被freemarker忽略解析,直接输出内容。

<#--freemarker中的普通文本-->
我是一个普通的文本

集合指令(List和Map)

集合指令-List

指令格式

<#list></#list>

例子

<#list stus as stu> 
   <tr>        
   <td>${stu_index+1}</td> 
   <td>${stu.name}</td> 
   <td>${stu.age}</td>
   <td>${stu.money}</td>  
   </tr>
 </#list>

注意事项:

${k_index}:得到循环的下标,使用方法是在stu后边加"_index",它的值是从0开始

集合指令-Map

1.获取map中的值

map['keyname'].property
map.keyname.property

2.遍历map

<#list userMap?keys as key>
    key:${key}--value:${userMap["${key}"]}
 </#list>

if指令

指令

<#if expression>
<#else>
</#if>

需求:在list集合中判断学生为小红的数据字体显示为红色。

<#if stu.name='小红'>  
  <tr style="color: red">  
        <td>${stu_index}</td> 
        <td>${stu.name}</td>
        <td>${stu.age}</td>
        <td>${stu.money}</td>
   </tr>
 <#else >    
  <tr>        
   <td>${stu_index}</td> 
   <td>${stu.name}</td>  
   <td>${stu.age}</td> 
   <td>${stu.money}</td> 
  </tr>
 </#if>

注意事项
在freemarker中,判断是否相等,=与==是一样的

运算符

1.运算符-数学运算
FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:

加法: +
减法: -
乘法: *
除法: /
求模 (求余): %

例子

100+5 运算:  ${100 + 5 }<br/>
100 - 5 * 5运算:${100 - 5 * 5}<br/>
5 / 2运算:${5 / 2}<br/>
12 % 10运算:${12 % 10}<br/>

2.运算符-比较运算符
在这里插入图片描述
注意事项

1.=和!=可以用于字符串、数值和日期来比较是否相等
2.=和!=两边必须是相同类型的值,否则会产生错误
3.字符串 “x” 、"x " 、"X"比较是不等的.因为FreeMarker是精确比较
4.gt代替>, FreeMarker会把>解释成FTL标签的结束字符,可使用括号避免这种情况,如:<#if (x>y)>

3.运算符-逻辑运算符

逻辑与:&&
逻辑或:||
逻辑非:!

例子

<#if (10 lt 12 )&&( 10  gt  5 )  > 
   (10 lt 12 )&&( 10  gt  5 )  显示为 true
 </#if>
   <br/><br/>
 <#if !false>
       false 取反为true
 </#if>

空值处理

1、判断某变量是否存在使用 “??”
用法为:variable??,如果该变量存在,返回true,否则返回false
例:为防止stus为空报错可以加上判断如下:

<#if stus??>   
 <#list stus as stu>       
  ......   
  </#list>
</#if>

2、缺失变量默认值使用 “!”
使用!要以指定一个默认值,当变量为空时显示默认值
例:${name!''}表示如果name为空显示空字符串。
如果是嵌套对象则建议使用()括起来
例:${(stu.name)!''}表示,如果stu或name为空默认显示空字符串。

内建函数

内建函数语法格式: 变量+?+函数名称
1.集合的大小

${集合名?size}

2.日期格式化

显示年月日: ${today?date}
显示时分秒:${today?time}
显示日期+时间:${today?datetime}
自定义格式化:${today?string("yyyy年MM月")}

3.内建函数c

model.addAttribute("point", 102920122);

point是数字型,使用${point}会显示这个数字的值,每三位使用逗号分隔。
如果不想显示为每三位分隔的数字,可以使用c函数将数字型转成字符串输出

${point?c}

4.将json字符串转成对象
一个例子:
其中用到了 assign标签,assign的作用是定义一个变量。

<#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
<#assign data=text?eval />开户行:${data.bank}  账号:${data.account}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十一、中间件的使用

Express的应用本质上就是调用各种中间件&#xff0c;中间件指的是业务流程中的中间处理环节&#xff0c;服务器的生命周期一般是 接收 —— 处理 —— 响应&#xff1b;那么中间件就充当处理的角色&#xff0c;它其实就是一个函数&#xff0c;该函数除了能够访问请求对象req和响…

TC275——02板卡简单介绍

前部 核心&#xff1a;英飞凌 32位 AURIXTC275 TriCore核 开发工具&#xff1a; AURIX™Development Studio、FreeEntryToolchain CPU&#xff1a; 最大频率&#xff1a;200M外部晶振&#xff1a;20MFPU&#xff1a;支持封装&#xff1a;LQFP176-22 FLASH&#xff1a;4M D…

高并发系统设计 -- 性能测试

响应时间&#xff1a;是客户发出请求到得到响应的整个过程的时间。 网络传输时间&#xff1a;N1N2N3N4应用服务器处理时间&#xff1a;A1A3数据库服务器处理时间&#xff1a;A2响应时间&#xff1a;N1A1N2A2N3A3N4 负载&#xff1a;模拟业务操作对服务器造成压力的过程&#x…

shell-函数与数组

1.编写函数&#xff0c;实现打印绿色OK和红色FAILED 判断是否有参数&#xff0c;存在为Ok&#xff0c;不存在为FAILED [rootcotenos day06]# vim colour.sh #!/bin/bash test(){if [ -z $1 ];thenecho -e "\033[31m FAILED \033[0m"elseecho -e "\033[32m …

git tutorial

最近老板要搞retreat 需要做一个分享&#xff0c;正好把分享的内容作为博客记录一下。 说起git&#xff0c;那就不得不提GitHub。 GitHub 最开始是作为一个面向开源以及私有项目的管理平台。它可以存储代码&#xff0c;文档&#xff0c;数据等等。目前最常用将其作为一个代码…

中点分割裁剪算法介绍 (简单易懂)

目录 一、算法介绍 二、算法描述 一、算法介绍 裁剪效果图&#xff1a; 中点分割裁剪算法的思想类似于二分思想&#xff0c;不断地在中点处将线段一分为二&#xff0c;对每段线段重复Cohen-Sutherland裁剪算法的线段可见性测试方法&#xff0c;直至找到每段线段与窗口边界线的…

STM32MP157驱动开发——Linux块设备驱动

STM32MP157驱动开发——Linux块设备驱动一、简介二、驱动开发1.使用请求队列的方式2.测试①3.不使用请求队列的方式4.测试②参考文章&#xff1a;【正点原子】I.MX6U嵌入式Linux驱动开发——Linux 块设备驱动 一、简介 之前学习的都是关于字符设备的驱动&#xff0c;包括 plat…

Node.js下载安装与基础操作

&#x1f973;博 主&#xff1a;初映CY的前说 &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;Node.js的下载安装操作 node.js下载安装 node.js中文网下载链接http://nodejs.cn/download/ 1.浏…

模型性能分析:ROC 分析和 AUC

本文[1]将介绍模型性能分析的两个方法&#xff1a;ROC & AUC。 ROC 分析和曲线下面积 (AUC) 是数据科学中广泛使用的工具&#xff0c;借鉴了信号处理&#xff0c;用于评估不同参数化下模型的质量&#xff0c;或比较两个或多个模型的性能。 传统的性能指标&#xff0c;如准确…

什么是进程、线程,什么是并发、并行及线程的创建和线程的基本使用

一、什么是程序、进程、线程 1、什么是程序 程序可以理解为是我们执行的一段代码&#xff0c;是一种静态的概念 2、什么是进程 进程是指运行中的程序&#xff0c;是一个动态的概念。进程有它自身的产生、存在和消亡的过程&#xff08;进程产生就会占用内存空间&#xff0c;反…

【WSL】[04]从C盘解放出来WSL的linux镜像

前言&#xff1a; C盘的硬盘资源有限&#xff0c;虚拟机的需求无限&#xff0c;所以&#xff0c;要把无限的硬盘需求搞到其他盘去才行啊 方案1&#xff1a;利用工具&#xff1a;move-wsl 1 管理员运行PowerShell,创建WSL的工作目录 移动前&#xff0c;C盘的空间大小&#xf…

vue-element-表格 Excel 【导出】功能

表格Excel导出功能 1. 将点击导出按钮添加点击事件click“handleDownload” 并在method中创建方法 <el-button type"danger" size"small" click"handleDownload">excel导出</el-button>复制下面的方法 or 去vue-element-admin中的s…

分享62个PHP源码,总有一款适合您

链接&#xff1a;https://pan.baidu.com/s/17mzEPqFhZp0UEvznSviiEA?pwdnjin 提取码&#xff1a;njin PHP源码 分享62个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后…

【C语言简明教程】探究整型数据在内存中的存储

概述 我们知道一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。那么整型数据在所开辟内存中到底是如何存储的&#xff1f; 目录 概述 原码、反码、补码 什么是原码、反码和补码&#xff1f; 为什么使用补码存储&#xff1f; 大小端存储 - 数据…

Hadoop高手之路6-ZooKeeper

文章目录Hadoop高手之路6-Zookeeper分布式协调服务一、Zookeeper简介二、Zookeeper的特性1. 一致性C2. 可靠性3. 顺序性4. 原子性A5. 实时性三、Zookeeper分布式集群的部署1. 下载安装包2. 上传3. 解压4. 配置环境变量5. 配置Zookeeper1) 复制一个配置模板文件2) 修改配置文件3…

C语言排序算法

冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 过程演示&#xff1a; #i…

shell第二天练习

题目 1、编写一个 Shell脚本&#xff0c;程序执行时从键盘读入一个目录名&#xff0c;如果用户输入的目录不存在&#xff0c;则提示file does not exist&#xff1b;如果用户输入的不是目录则提示用户必须输入目录名&#xff1b;如果用户输入的是目录则显示这个目录下所有文件…

django笔记《模型和数据库一》

文章目录1 前言2 创建一个demo项目2.1 修改配置文件3 模型3.1 主键3.2 django 内置字段类型3.3 自定义字段类型3.4 django字段选项3.5 字段备注名3.5 META3.6 关联关系3.6.1 多对一关系3.6.2 多对多关系3.6.3 一对一关系3.7 字段命名限制3.8 模型属性&#xff1a;Model.objects…

基于springboot+Vue前后端分离的招聘管理系统(程序+数据库+文档)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

A Survey on Deep Learning Techniques for Stereo-based Depth Estimation论文阅读

1. 摘要 估计RGB图片的深度是一个长期存在的病态问题&#xff0c;计算机视觉、图形学、机器学习社区已经探索了数十年。立体匹配是最广泛见诸文献的技术之一&#xff0c;因为它与人类的双目系统有强关联。传统上&#xff0c;利用多张图片的人工特征匹配来处理基于立体的深度估…