FreeMaker的基本使用

Java安全之freemaker模版注入 FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。在线手册:什么是 FreeMarker?- FreeMarker 中文官方参考手册模板文件存放在Web服务器上,当访问指定模版文件时, FreeMarker会动态转换模板,用最新的数据内容替换模板中${...}的部分,然后返回渲染结果。${...}: FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式被称为(插值) 阅读详情

https://freemarker.apache.org/docs/dgui_quickstart.html

  • text 文本

  • ${...}: 插值,括号内表达式值代表输出 interpolations,形如:  ${ and } (或者 #{ and })

  • FTL tags ( FreeMarker Template Language tags): FreeMarke模板语言标记,类似HTML标记,但是运用于freemaker,不会输出在网页页面。标记以 #/@开始。(用户定义FTL tags 使用 @ ),

  • Comments: 注释, <#-- and -->.网页源码中不可见,因为freemaker跳过他们了.

除了FTL tag,interpolation和注释,其他内容都视为静态文本。在网页直接输出。

 

 

数据类型&基本表达

freemaker的基本语法

<# ... > 中存放所有freemaker的内容,之外的内容全部原样输出。
<@ ... /> 是函数调用

方法与函数的区别:方法来源于数据模型(Java对象的方法), 函数是模板中定义的,二者使用方式是相同的。

自定义函数:

无参的

 

带参数的

 

声明变量

数据类型 

两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下:
<#if condition><#elseif condition><#else></#if> 条件判断
<#list hash_or_seq as var></#list> 遍历hash表或者collection(freemaker称作sequence)的成员
<#macro name param1 param2 ... ><#nested param></#macro> 宏,无返回参数
<#function name param1 param2><#return val></#function>函数,有返回参数
var?member_function(...) 用函数对var进行转换,freemaker称为build-ins。实际内部实现类似member_function(var, ...)
stringA[M .. N] 取子字符串,类似substring(stringA, M, N)
{key:value, key2:value2 ...} 直接定义一个hash表
[item0, item1, item2 ...] 直接定义一个序列
hash0[key0] 存取hash表中key对应的元素
seq0[5] 存取序列指定下标的元素
<@function1 param0 param1 ... /> 调用函数function1
<@macro0 param0 param1 ; nest_param0 nest_param1 ...> nest_body </@macro> 调用宏,并处理宏的嵌套
<#assign var = value > 定义变量并初始化
<#local var = value> 在 macro 或者 function 中定义局部变量并初始化
<#global var = value > 定义全局变量并初始化
${var} 输出并替换为表达式的值
<#visit xmlnode> 调用macro匹配xmlnode本身及其子节点
<#recurse xmlnode> 调用macro匹配xmlnode的子节点

指令:derectives,FTL tag形式

if

if语句 选择性跳转。举例,对不同的人不一样的打招呼。 


<html>

<head>

<title>Welcome!</title>

</head>

<body>

<h1> Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!

</h1>

<p>Our latest product: <a href="${latestProduct.url}">${latestProduct.name}</a>!

</body>

</html>


 

当user字符串等于"Big Joe"时,打招呼为:“ our beloved leader" .

如果条件语句返回值为false,则跳过。.

 

若price值为0,打印输出为  "Pythons are free today!" 

<#if animals.python.price == 0>
  Pythons are free today!
</#if>

标签<#else><#elseif>使用 逻辑结构与java相同。举例:

<#if animals.python.price < animals.elephant.price>
  Pythons are cheaper than elephants today.
<#else>
  Pythons are not cheaper than elephants today.
</#if>

 

<#if animals.python.price < animals.elephant.price>
  Pythons are cheaper than elephants today.
<#elseif animals.elephant.price < animals.python.price>
  Elephants are cheaper than pythons today.
<#else>
  Elephants and pythons cost the same today.
</#if>

If标签内直接使用一个有true/false返回值的条件语句,也可以直接使用

<#if animals.python.protected>
  Pythons are protected animals!
</#if>

list 

列表标签 用于列举

<p>We have these animals:
<table border=1>
  <#list animals as animal>
    <tr><td>${animal.name}<td>${animal.price} Euros
  </#list>
</table>

输出为:所有动物:老鼠,大象,蟒蛇

<p>We have these animals:
<table border=1>
    <tr><td>mouse<td>50 Euros
    <tr><td>elephant<td>5000 Euros
    <tr><td>python<td>4999 Euros
</table>

以上表格输出,转化为list :

<#list sequence as loopVariable>

repeatThis

</#list>.

每当有sequence,repeatThis 部分重复输出,sequence可以为任何表达式.

<ul>
<#list misc.fruits as fruit>
  <li>${fruit}
</#list>
</ul>

 

上面例子的问题:当fruit为0时,仍会输出空<ul></ul>.下面的方法可以避免此类情况的发生。

<#list misc.fruits>
  <ul>
    <#items as fruit>
      <li>${fruit}
    </#items>
  </ul>
</#list>

item存在时输出,否则就跳过,不做任何操作

另一种常见的方式,可以实现输出内容的空格控制。

<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, </#list>
<p>Fruits: orange, banana

 0个 fruits。只打印"Fruits:" .list可以像if语句一样执行else, 当fruit为0时,执行:

<p>Fruits: <#list misc.fruits as fruit>${fruit}<#sep>, <#else>None</#list>

Note:

As a matter of fact, this simplistic example could be written like this, but it uses language devices that are off topic here:

<p>Fruits: ${fruits?join(", ", "None")}

All these directives (list, items, sep, else) can be used together:

<#list misc.fruits>
  <p>Fruits:
  <ul>
    <#items as fruit>
      <li>${fruit}<#sep> and</#sep>
    </#items>
  </ul>
<#else>
  <p>We have no fruits.
</#list>

 

include 

插入其他文件的内容到当前模板中。

假设你要在多个也main显示相同的copyright.可以单独创建copyrigh文件,在其他地方插入该文件。首先,保存文件为:copyright_footer.html:

<hr>
<i>
Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
<br>
All Rights Reserved.
</i>

 

当你需要使用该文件时:
<html>
<head>
  <title>Test page</title>
</head>
<body>
  <h1>Test page</h1>
  <p>Blah blah...
  <#include "/copyright_footer.html">
</body>
</html>

 

同时使用多个

<#list animals as animal>
      <div<#if animal.protected> class="protected"</#if>>
        ${animal.name} for ${animal.price} Euros
      </div>
</#list>

 

处理缺失变量

变量不存在或者为空,指定默认值 ${vira_name!default_value}

<h1>Welcome ${user!"visitor"}!</h1>

使用双问号判断缺失值??

<#if user??><h1>Welcome ${user}!</h1></#if>

 转义HTML,XML和其他标记

模板生成HTML. 建议的做法是使用ftlh文件扩展名来激活HTML自动转义,使用ftlx文件扩展名来激活XML自动转换。你可以尝试自动转义,如$ {“<”},然后检查原始输出(对于 HTML或XML转义)。 如果不是,并且配置不会被调整,请将其添加为模板的第一行:

<#ftl output_format="HTML">

插值 

形如:${expression},expression 可以是任何形式(e.g. ${100 + x}).

 

 

 

 

 

 

专业视频格式转换工具Freemake的核心技术与应用 视频编解码技术是数字媒体处理的基础,通过不同编码算法实现视频数据的高效压缩与传输。专业级转换工具运用硬件加速和智能码率分配等原理,在保持画质的前提下显著提升转码效率。这类工具的技术价值体现在支持HDR元数据保留、批量处理等工业级需求,广泛应用于短视频制作、影视后期等领域。以Freemake Video Converter为例,其支持500+格式转换与CUDA加速,特别适合处理4K/8K素材和移动端适配场景,解决音画同步、色彩空间转换等常见工程问题。 阅读详情

相关推荐

SRAM vs RRAM:存算一体芯片选型指南(含最新技术对比)

本文深入对比了SRAM与RRAM在存算一体芯片设计中的核心差异,为硬件工程师和架构师提供实战选型指南。文章从技术本质、性能、功耗、成本及设计风险等多维度剖析,指出SRAM基于成熟CMOS工艺,适合高精度、低延迟场景;而RRAM凭借非易失性和高密度潜力,在超低功耗、固定模型应用中优势明显。决策需综合项目预算、上市时间及技术储备。

e4f5g6h的博客 937

FreeMaker教程(一)-----FreeMaker简介

1.什么是 FreeMarker? FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序。      所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符

fendo 8018

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 569

(超详细,避免踩坑)如何使用freeMaker模板生成器处理图片以及文字替换

场景:公司要求要更改word中的图片上的文字系数,动态生成文字效果图,并替换文字模板 如下图是需要我们将系数动态替换上的 左边是模板,右边是实现效果图 由于第一次学习使用freeMaker没有经验,看着觉得很难。 我采取的第一套方案是:图片上加水印的方式替换图片上的文字 弊端:图片加水印没办法处理竖型的文字,只能水平替换,那么侧边无法竖着替换 结果:not pass 方案二:采用POI的方式 弊端:POI只能实现word中普通文字替换,对于文本框替换实现不了,我是...

weixin_44347111的博客 2296

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3211

数字孪生驱动的城市地下管网智能运维与应急处置决策支持系统

上海市城市数字化中心的数据实践显示,通过关联分析管网材质与故障率的关系,将铸铁管更换周期从15年优化至8年(李敏,2021)。环境效益方面,上海市通过优化管网运行参数,年减少碳排放1.8万吨,相当于种植36万棵乔木。数字孪生与物理设备的双向交互采用OPC UA协议实现,某次天津管网渗漏事件中,系统通过实时数据反馈,指导现场人员调整注浆方案,将修复时间从48小时压缩至16小时。虚拟指挥沙盘支持多视角协同,深圳水务系统的实践表明,通过AR可视化技术,跨部门会议效率提升60%,方案决策时间缩短40%。

2501_92431686的博客 1424

FreeMarker使用

FreeMarker使用

小何的博客 652

vasp算表面吸附流程_VASP表面吸附计算实例分析

本文主要为了记录在学习Vasp计算过程中如何设置INCAR中的一些参数,并不着重讲解其含义,详见可自行到vasp官网查阅。其次关于建模部分也不做细致讨论,一般结构可从Materials Studio里自带的晶体数据库导出,或从三大数据库网站上下载:1、Materaials Project网址:https://materialsproject.org/(强烈推荐,邮箱注册即可使用)2、CCDC网址:...

weixin_39617669的博客 2240

freemaker的基本语法

  &lt; #   &gt;   中存放所有freemaker的内容,之外的内容全部原样输出。 &lt; @   /&gt;   是函数调用两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下: &lt; # if  condition &gt; &lt; #elseif condition &gt; &lt; # els...

xieronghua246的博客 214

模型预测控制(MPC)解析(二):单输入单输出系统

在上一篇中,为了便于说明,预测控制系统采用单输入单输出系统为例进行设计。由于系统模型使用的是状态空间方程,于是可以很容易的将这种设计方法可以扩展到多输入、多输出系统。

行者无疆的博客 8223

【专栏必读】王道考研408计算机组成原理万字笔记使用说明及章节导航

本文是为准备408王道计算机组成原理考试的学生精心整理的万字笔记,涵盖了从计算机系统概述、数据表示和运算到存储系统、指令系统等多个章节的重点内容。本文强调了学习笔记的重要性,并分享了学习建议,如按视频课逻辑记录,建立学科框架。笔记详细记录了每章的关键知识点,包括存储器、CPU、I/O系统的工作原理,还附带了习题和思维导图,旨在帮助考生高效复习。

快乐江湖的博客 9万+

FreeMaker基本使用

freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。目前企业中,主要用Freemarker做静态页面或是页面展示。

abc_xian的博客 440

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 407

Freemaker基本用法

声明转载地址:https://blog.youkuaiyun.com/pengpengpeng85/article/details/52070602 FTL指令常用标签及语法 注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。 freemaker注释:<#-- 注释内容 -->格式部分,不会输出 基础语法 1、字符输出 ${emp.name?if_exists}      // 变量存在,输出该变量,否则不输出 ${emp.name!}           //

qq_40616823的博客 440

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Freemaker基本语法

转自:http://www.cnblogs.com/surgod/p/3244914.html 1. 判断 &lt;#if ... &lt;#else&gt; &lt;/#if&gt; 2. 循环 &lt;#list animals as being&gt; &lt;/#list&gt; 3. 包含 &lt;#include " "&gt; 4..

凤凰涅槃 222

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

freemaker基本语法

http://www.blogjava.net/liuwentao253/archive/2006/12/25/89829.html     &lt;# ... &gt; 中存放所有freemaker的内容,之外的内容全部原样输出。&lt;@ ... /&gt; 是函数调用两个定界符内的内容中,第一个符号表示指令或者函数名,其后的跟随参数。freemaker提供的控制包括如下: &lt;#if...

babyck的博客 167

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

freeMaker 基本1

  FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成   1,文本:直接输出的部分 2,注释:&lt;#--...--&gt;格式部分,不会输出 3,插值:即${.....}或#{....}格式的部分,将使用数据模型中的部分代替输出 4.FTL指令:FreeMaker指定,和HTML标记类似,名字前加#予以区分,不会输出...

qmx_c的专栏 151

Freemaker模板的基本入门实例

解析: FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,简单来讲就是模板加数据模型。简单入门实例:1、freemarker模板例子...

yuanyuan214365的博客 649

freemaker的基本语法1

  FreeMarker 开发笔记 1.freemarker中Request,Session的用法:java块:request.getSession().setAttribute("qq","http://www.qq.com");request.setAttribute("qq", "http://www.qq.com");freemarker代码:&lt;#if Session ["qq"..

nvryy的专栏 159

静态化模板Freemaker的基本语法

首先,导入jar包 freemark的demo类: 1 public class FMDemo { 2 3 //实例化Freemarker 配置类 ftl freemarker templet 4 // .java .html .jsp .xml 5 // .ftl .txt 6 //dao bean xml se...

weixin_33897722的博客 92

FreeMaker基础-基本概念

<br />模板+数据模型=输出<br /> <br />数据模型由标量,哈希表和序列组成。<br />标量(scalars):    存储单一的值,这种类型的值可以是字符串,数字,日期/时间或者是bool。<br />哈希表(hash):            存储变量和与其相关且有唯一标识名称变量的容器。<br />序列(sequences):               存储有序变量的容器。存储的变量可以通过数字索引来检索,索引从0开始。<br /> <br />模板是包含插值,标签,注解和指令的ht

圈儿的专栏 989

FreeMaker一篇通

FreeMaker一篇通前言Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归和闭包回调功能让freemaker可以完成几乎所有我们所想的功能。从个人看法而言,freemaker完全有能力作为MDA的代码辅助生成工具。 本文试图越过传统的概念性介绍,通过一组例子直接把读者带入到Freemaker应用的较高层阶。正文 大家看文章标题就应该知道,我想用一篇文章...

weixin_34324081的博客 178
上一篇: idea Error:(3, 32) java: 程序包org.springframework.boot不存在
下一篇: window 之命令行的cd
FactoryGirl_2018
博客等级 码龄10年 1粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值