FreeMarker使用总结

FreeMarker语法参考 FreeMarker的基本语法,从官方文档翻译的! 立即下载
FreeMarker使用总结
1.FreeMarker概述
  1)FreeMarker是一个模板引擎: 一个基于模板生成文本输出的通用工具,使用纯Java编写。
         模板+数据模型=输出
  2)FreeMarker被设计用来生成HTML Web页面,适合于作为Web应用程序的一个组件,特别适合于MVC应用程序的视图组件。
======================================================================================================================
2.数据模型 - Data Model
  1)典型的数据模型是树性结构,具有任意复杂和深度的层次
     (root)
       |
       +- test = "It is a test"
       |
       +- whatnot
       |     |
       |     +- because = "don't know"
       |
       +- animals
            |   
            +- (1st)
            |    |
            |    +- name = "elephant"
            |    |
            |    +- price = 5000
            |        
            +- (2st)
                 |
                 +- name = "cat"
                 |
                 +- price = 100  
  2)数据模型中变量的种类
     i) Scalars - 存储单一的值,类型可以为字符串/数值/日期时间/布尔型。
         Example. test、because、name、price都是Scalar
     ii) Hashes - 用于存储其余的变量(subvariables,子变量),类似于目录,包含保存下级变量的唯一查询名字。
         Example. (root)、whatnot都是Hashes,访问because的语法:${whatnot.because}
     iii) Sequences - 子变量顺序存放,子变量通过序号(从0开始)访问。
         Example. animals就是Sequences,访问子变量name的语法: ${animals[0].name}
======================================================================================================================
3. 模板 - Templates
        最简单的模板文件可以是一个简单的HTML文件(或者任意的文本文件),模板文件通常包含以下部分:
   1)Comments - 注释,包含在<#--和-->之间
   2)${...} - Inerpolations(插值),FreeMarker会在输出时使用实际值进行替代。
      Example1. test.ftl
        <html>
        <head>
          <title>${test}</title>
        </head>
        <body>
          <h1>The most popular animal</h1>
          <p>
             <#-- the first animal elephant is more popular-->  
             ${animals[0].name} - price:${animals[0].price}
          </p>          
        </body>
        </html>  
      插值的类型:通用Interpolation - ${expr}
                                    数字Interpolation - #{expr}或#{expr;format}
   3) FTL tags - FreeMarker Template Language tags,FTL标记,也称为指令
      i) FTL标记的语法:
                                  开始标记: <#directive_name parameters>
                                  结束标记: </#directive_name>
                                 空标记:      <#directive_name parameters/>
      ii) 指令的类型:预定义指令和用户定义指令(使用@替换#)
======================================================================================================================
4.Value值、Types类型、Expression表达式、操作符
  1)值的类型有:  
    Scalars:
        String
        Number
        Boolean
        Date
    Containers:
        Hash
        Sequence
        Collection
    Subroutines:
        Methods and functions
        User-defined directives
    Miscellaneous/seldom used:
        Node
  2)Expression:  
   (1) 字符串:使用单引号或双引号限定,包含特殊字符需转义。
                         有一类特殊的字符串称为raw字符串,被认为是纯文本,该类字符串在引号前面加r。Example. ${r"${foo}"}
             连接操作 - Example:${"Hello " + user + "!"}
             取子串-     Example:<#assign var1="dangdang2">
                             <a href="#">${var1[0..3]}</a>
    (2)数字:不需要引号,不支持科学计数法,不能省略小数点前面的0。
                                算术运算符有:+、-、×、/、%
                                使用内建的int获得整数部分
            Example:${1.1?int}    - 返回1
                    ${1.999?int}  - 返回1
                    ${-1.1?int}   - 返回-1
                    ${-1.999?int} - 返回-1
    (3)布尔值:true 和false
    (4)序列:由逗号分隔的子变量列表,由方括号限定。
             Example. ["spring","summer","autumn","winter"]
                 [2+2,[1,2,3,4],"whatnot"] - 列表项目是表达式
                 2..5 - 等同于[2,3,4,5],可以使用数字范围定义数字序列,注意数字范围没有方括号
                 5..2 - 可以定义反递增的数字范围
                                序列的连接操作:
                 <#list ["Joe", "Fred"] + ["Julia", "Kate"] as user>
                    - ${user}
                    </#list>
    (5)散列:由逗号分隔的键/值列表,由大括号限定,键和值之间用冒号分隔。
            Example. {"name":"dog","price":120}
                              散列的连接操作:和 字符串一样,使用+,如果具有相同的key,右边的值替代左边的值
           Example:<#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>
                    - Joe is ${ages.Joe}
                    - Fred is ${ages.Fred}
                    - Julia is ${ages.Julia}
  -------------------------------------------------------------------------------
  3)获取变量
    (1)顶层变量:${variable}
    (2) 从散列中获取数据:${whatnot.because}或者${whatnot["because"]}
    (3) 从序列获取数据:${animals[0].name}
    (4) 获取序列片段:使用[startIndex..endIndex]语法
    (5) 特殊变量:FreeMarker内定义的变量,使用.variable_name语法访问。
======================================================================================================================
5.Interpolation(插值)的使用
      通用Interpolation
    1)插入字符串值:直接输出表达式结果
    2)插入数字值:根据缺省值(由#setting指令设置)将表达式结果转换为文本输出。
      Example:
         <#setting number_format="currency"/>
         <#assign answer=42>
          ${answer}  - 输出$42.00          
          ${answer?string}  - 输出$42.00
          ${answer?string.number}  - 输出42
          ${answer?string.currency}  - 输出$42.00
          ${answer?string.percent}  - 输出4,200%
    3)插入日期值:
      Example:${lastUpdated?string("yyyy-MM-dd HH:mm:ss")
    4)插入布尔值:
      Example:<#assign foo=true>
               ${foo?string("yes","no")}
   -------------------------------------------------------------------------
   数字Interpolation - #{expr;format}
    format的格式:mX 小数部分最小X位,MX 小数部分最大X位
    Example:<#assign x=2.582/>
            <#assign y=4/>
            #{x; M2} <#-- 2.58 -->
            #{y; M2} <#-- 4 -->
            #{x; m1} <#-- 2.6 -->
            #{y; m1} <#-- 4.0 -->
            #{x; m1M2} <#-- 2.58 -->
            #{y; m1M2} <#-- 4.0 -->
======================================================================================================================
6. 常用指令
  1)if,else,elseif
       语法:<#if condition>
          ...
        <#elseif condition2>
          ...
        <#elseif condition3>
          ...
        ...
        <#else>
          ...    
        </#if>
   2)switch, case, default, break
       语法:<#switch value>
          <#case refValue1>
            ...
            <#break>
          <#case refValue2>
            ...
            <#break>
          ...
          <#case refValueN>
            ...
            <#break>
          <#default>
            ...
       </#switch>    
   3)list
       语法: <#list sequence as item>
          ...
        </#list>      
   List指令中的隐含变量:
     item_index:当前迭代项的位置,从0开始。
     item_has_next:用于判断当前迭代项是否有下一项。   
     -------------------------------------------------------------------------------------             
        Example1:
            <#-- 在循环中使用隐含变量 -->
            <#assign seq = ["winter", "spring", "summer", "autumn"]>
            <#list seq as x>
             ${x_index + 1}. ${x}<#if x_has_next>,</#if>
            </#list>
        Example2:
            <#-- 固定次数的循环-->
            <#assign x=3>
            <#list 1..x as i>
              ${i}
            </#list>
        Example3:
             <#-- 散列的循环 -->
            <#assign items={"k1":"one","k2":"two"}>
            <select>
            <#list items?keys as itemKey>
              <option value="${itemKey}">${items[itemKey]}</option>
            </#list>
            </select>
    --------------------------------------------------------------------------------------
   4)include:用于包含其他的模板文件
       语法:<#include path> or <#include path options>
           path: The path of the file to include; an expression that evaluates to a string. (With other words, it doesn't have to be a fixed string, it can also be something like, for example, profile.baseDir + "/menu.ftl".)
           options: One or more of these: encoding=encoding, parse=parse
                  encoding: Expression evaluates to string
                  parse: Expression evaluates to boolean (also accepts a few string values for backward compatibility)
         example1:
                <#-- struts2中主题xhtml下的select.ftl文件 -->
                <#include "/${parameters.templateDir}/${parameters.theme}/controlheader.ftl" />
                <#include "/${parameters.templateDir}/simple/select.ftl" />
                <#include "/${parameters.templateDir}/xhtml/controlfooter.ftl" />
  5) assign:用于定义变量或者替换存在的变量
     语法:<#assign name=value>
        or
        <#assign name1=value1 name2=value2 ... nameN=valueN>
        or
        <#assign same as above... in namespacehash>
        or
        <#assign name>
          capture this
        </#assign>
        or
        <#assign name in namespacehash>
          capture this
        </#assign>
        name: name of the variable. It is not expression. However, it can be written as a string literal, which is useful if the variable name contains reserved characters, for example <#assign "foo-bar" = 1>. Note that this string literal does not expand interpolations (as "${foo}").
        value: the value to store. Expression.
        namespacehash: a hash that was created for a namespace (by import). Expression.
   6)import: 导入一个库到模板中,FreeMarker为导入库创建新的命名空间
       语法:<#import path as hash>
        path: The path of a template. This is an expression that evaluates to a string.
        (With other words, it doesn't have to be a fixed string, it can also be something like, for example, profile.baseDir + "/menu.ftl".)
        hash: The unquoted name of hash variable by which you can access the namespace. Not an expression.
   Example1:
        <#--使用命名空间-->
        <#import "/template/simple/test.ftl" as my>
        <#assign var1="dangdang2" in my>
        <a href="${my.url}">${my.var1}</a>
========================================================================
7.内置函数 - 参阅FreeMarker Manual
8.杂项
  1)宏 - 宏是和某个变量关联的模板片段,以便在模板中通过用户定义指令使用该变量。
  Example1:<#macro greet>
               <font size="2">Hello world!</font>
            </#macro>
            <#--使用宏-->
            <@greet></@greet>
   -----------------------------------------------------------------------------------------
   (1)  嵌套内容 - 用户定义指令可以有嵌套内容,使用<#nested>指令执行指令开始和结束标记之间的模板片段
    Example2:<#macro border>
              <table border=1>
                 <tr><td><#nested></td></tr>
              </table>
           </#macro>
           <!--使用宏-->
           <@border>The bordered text</@border>
    -------------------------------------------------------------------------
   (2)在宏定义中使用循环变量:
                 用户定义指令可以有循环变量,通常用于重复嵌套内容,基本用法是:作为nested指令的
                  参数传递循环变量的实际值,而在调用用户定义指令时,在<@…>开始标记的参数后面指定
                 循环变量的名字
       Example3:
         <#macro repeat count>
            <#list 1..count as x>
            <#nested x, x/2, x==count>
            </#list>
         </#macro>
         <@repeat count=4 ; c, halfc, last>
             ${c}. ${halfc}<#if last> Last!</#if>
         </@repeat>
         输出结果:
            1. 0.5
            2. 1
            3. 1.5
            4. 2 Last!
    -------------------------------------------------------------------------
  2)在模板中定义变量
    (1)plain变量:使用assign指令创建和替换,可以在模板任何地方访问,包括使用include指令插入的模板。
    (2)局部变量:使用local指定创建和替换,只在宏定义体中有效。
    (3)循环变量:只能存在于指令的嵌套内容中,由指令(如list)自动创建。
  3)名字空间
          通常情况下,只使用一个名字空间,称为主名字空间。
         为了创建可重用的宏或其他变量的集合(通常称为库),必须使用多名字空间,以防止命名冲突。
        使用名字空间的步骤:
     Step1.创建库
       Example:《#-- 保存在模板文件inc.ftl-->
                <#macro copyright date>
                  <p>Copyright (C) ${date} Bill Smith. All rights reserved.
                  <br>Email: ${mail}</p>
                </#macro>
                <#assign mail = "billsmith@xxx.com">  
     Step2.使用import指令将库导入到模板中
          <#import "/lib/inc.ftl" as my>
          <#assign mail="fred@xxx.com> <#--定义同名变量,并没有冲突-->
          <@my.copyright date="2010-2011"/>
          ${my.mail}
          ${mail}
======================================================================================================================
9.FreeMarker综合案例 - 分页标签模板文件
<#-- 分页标签模板文件pager.ftl-->
<div class="paginating">
     <div class="pageform">
      <form name="formPager" action="${parameters.url}" method="post">
       <a href="javascript:document.formPager.submit();">确定</a>
       <span>页</span>
       <input name="pageno" type="text" value="1"/>
       <span>共${parameters.pageCount}页 转到</span>
      </form>
     </div>
     <div class="pagepanel">
        <#-- 下一页 -->
        <#if parameters.pageno==parameters.pageCount>
          <a class="pagebtn disabled" href="#"><span>下一页</span></a>        
        <#else>
          <a href="${parameters.url}?pageno=${parameters.pageno+1}" class="pagebtn"><span>下一页</span></a>
        </#if>   
        <#-- 页码 -->     
        <#list parameters.pageCount..1 as x>
           <#assign url=parameters.url+'?pageno='+x/>
           <#if parameters.pageno==x>
              <a href="#" class="pagenum current"><span>${x}</span></a>
           <#else>
             <a href="${url}" class="pagenum"><span>${x}</span></a>
           </#if>
        </#list>      
        <#-- 上一页 -->
        <#if parameters.pageno==1>
          <a class="pagebtn disabled" href="#"><span>上一页</span></a>
        <#else>
          <a href="${parameters.url}?pageno=${parameters.pageno-1}" class="pagebtn"><span>上一页</span></a>
        </#if>  
     </div>
 </div>
======================================================================================================================
(END)
 
            
     

        

   
 
   
                         
                         
                         
                         
                         
                         
                         
                         
                         
                                              
    
               
    

 
        
        
        
        
        
        
         
         
         
         
         
         
         
         
         
        

Sublime的freemarker插件 Sublime的freemarker插件,放入Sublime的 \Data\Packages目录下重启可用 也可以到这里下载: https://github.com/briancavalier/textmate-freemarker-bundle 立即下载

相关推荐

freemarker_常用内置函数

NULL 博文链接:https://zhangyulong.iteye.com/blog/1162387

关于Freemarker模板报错的问题

模板引擎用的是Freemarkker,最近在html页面使用格式化样式时,发现会提示#include标签无效的信息。整个页面显示不出来。 后来发现是因为格式化的div中包含标签。因为#include是freemarker的标签,eclipse只能识别html标签,就会提示无效标签的警告,不影响实际使用。因此放弃格式化包含此标签的div即可。

Anthony_1223的博客 2980

OpenBCI脑电数据处理实战:用MNE库从Raw对象到可视化分析全流程

本文提供了使用MNE-Python库处理OpenBCI脑电数据的完整实战指南。从通过BrainFlow库获取原始数据流、创建核心的Raw对象,到进行工频滤波、带通滤波等关键预处理步骤,最后实现时域信号、功率谱密度及地形图等多种专业可视化分析,手把手教你完成脑机接口数据处理的全流程。

gin88的博客 369

Freemarker总结

 FreeMarker是一个用Java编写的模板引擎,主要用来生成HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,但不像PHP,通常由Java程序准备要显示的数据,由FreeMarker模板生成页面。 FreeMarker可以作为Web应用框架一个组件,但它与容器无关,在非Web应用程序环境也能工作的很好。 FreeMarker适合作为MVC的视图

ykdsg的专栏 9236

在线迭代RLHF实战:从原理到实现,复现超越官方指令模型的工作流

大语言模型(LLM)的对齐技术是提升其与人类意图一致性的关键。其中,基于人类反馈的强化学习(RLHF)通过引入人类偏好信号,指导模型优化生成策略,是实现模型“有用”与“无害”的核心方法。其技术价值在于将抽象的“对齐”目标转化为可优化的奖励信号,从而显著提升模型在对话、推理等任务中的表现。然而,传统的离线RLHF存在数据分布偏移和奖励黑客等瓶颈。在线迭代RLHF通过构建“生成-评估-学习”的动态数据循环,让模型能够利用自身最新生成的数据进行持续优化,有效克服了上述问题,成为当前提升指令模型性能的前沿方向。本文

weixin_28725037的博客 368

别再只盯着DDR5了!聊聊3D DRAM:它凭什么能解决AI算力的内存墙难题?

本文深入探讨了3D DRAM技术如何突破AI算力的内存墙限制。通过立体堆叠架构,3D DRAM在存储密度、带宽和延迟方面实现显著提升,有效解决AI训练和推理中的内存瓶颈问题。文章还分析了三星、SK海力士等巨头的技术路线图,并指出商业化面临的挑战与机遇。

weixin_42685438的博客 189

SpringBoot 整合视图层技术

SpringBoot整合视图层技术 SpringBoot 整合jsp SpringBoot 整合freemarker SpringBoot 整合Thymeleaf 一 SpringBoot 整合jsp技术 1.修改pom文件添加坐标 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3...

sjy_6的博客 1176

智护健康:基于 ESP32 的可穿戴式心率血氧远程监测手环设计与实现

随着健康管理理念的普及,可穿戴式健康监测设备成为刚需。本文设计了一款基于 ESP32 芯片的可穿戴式心率与血氧远程监测手环,通过集成专业生物传感器采集生理数据,借助 ESP32 的无线通信能力实现数据远程传输,搭配手机 APP 与云平台完成数据存储、分析与预警。文中详细阐述了硬件选型、模块接线、软件设计流程及核心代码实现,该手环具备低功耗、高精度、实时性强等特点,可满足日常健康监测与远程照护需求。

weixin_42300449的博客 1199

FreeMarker常见错误

FreeMarker、指令、标签、break、List

kakakai110的专栏 1846

问答式AI vs 智能体(Agent):它们有什么不同?

你肯定用过 ChatGPT 或文心一言——问它一个问题,它给你一个答案。AI Agent(AI智能体)。很多人搞不清楚:它们不都是"AI"吗?有什么区别?这篇文章用一个最简单的类比,彻底讲清楚这两者的本质差异。框架特点适合人群AutoGPT完全自主执行任务,链式思考开发者MetaGPT模拟团队协作,多角色分工开发者LangChain最流行的Agent开发框架开发者Dify可视化无代码搭建Agent非技术用户Coze(扣子)字节跳动出品,国内最易用普通用户WorkBuddy。

Johnny2004的专栏 448

[QMT量化交易小白入门]-七十三、主力资金动向:板块与个股资金流数据API(量化python代码解析)

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1119

freemarker --- 基本使用

freemarker基本使用

Andy的java博客 2169

使用C#实现的多人语音视频系统:WebSocket与WebRTC集成

通过上述的代码示例,我们可以使用C#编写一个多人语音视频系统,该系统集成了WebSocket和WebRTC技术。当然,这只是一个简单的示例,实际的多人语音视频系统可能需要更多的功能和优化。通过结合这两种技术,我们可以实现实时的语音和视频通信,支持多人同时参与。在上述代码中,我们创建了一个WebSocket服务器,监听在本地的8080端口,并创建了一个WebRTC连接。接下来,我们将详细介绍如何使用C#编写一个多人语音视频系统,包括使用WebSocket建立连接和使用WebRTC进行实时通信。

TjsReact的博客 1634

Freemarker的使用

和缓存的差别 共同点:都可以减小数据库的访问压力。 区别: (1)缓存技术适用于小规模的数据。以及一些经常变动的数据。 (2)网页静态化技术适用于大规模但是变化不太频繁的数据。 Freemarker指令: assign指令用于在页面上定义一个变量 (1)定义简单类型 <#assign linkman="周先生"> 联系人:${linkman} (2)定义对象类型 <#assign info={"mobile":"13812345678",'address...

m0_64702880的博客 3341

YOLO26 vs YOLOv12 vs YOLOv10:工业场景性能实测,速度/精度/部署难度全对比(附完整测试代码)

YOLO26:工业场景全能型选手,无NMS+无DFL设计让部署和推理都省心,小目标精度优势明显,CPU推理速度提升43%,适合大多数生产线场景YOLOv12:中大型目标检测专家,Area Attention在复杂背景下表现出色,适合汽车、家电等大型零部件检测YOLOv10:速度狂魔,GPU上性能领先,轻量化版本适合边缘部署,但小目标精度略逊,适合对实时性要求极高的分拣线场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 623

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Freemarker使用详解

1.什么是网页静态化技术 随着用户访问量以及数据量的增大,网页静态化技术方案如今越来越流行。 什么是网页静态化技术呢?简单来说就是将网页以纯静态方式的形式展现。 2.网页静态化技术与缓存技术的比较 共同点:都可以减小数据库的访问压力。 区别: (1)缓存技术适用于小规模的数据。以及一些经常变动的数据。 (2)网页静态化技术适用于大规模但是变化不太频繁的数据。 页面静态化与缓存技术的定义: 页面静态化是指通过一些模板技术(如freemarker)将数据模型生成静态html页面并通过..

qq_45441466的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

freemarker介绍及使用

FreeMarker快速入门 1. FreeMarker介绍 1.1 什么是FreeMarker Apache FreeMarker是一款开源的模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板使用FreeMarker Template Language(FTL)模板语言编写,这是一种简单的专用语言。模板用于展示数据,数据模型用于呈现什么数据。 模板

懵齐的博客 1808

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring Boot中使用FreeMarker及FreeMarker入门

文章目录一、FreeMarker简介二、Spring Boot整合FreeMarker1.添加依赖2.相关配置3.FreeMarker文件模板三、使用示例四、FreeMarker常用指令 一、FreeMarker简介 Freemarker 模版后缀为 .ftl(FreeMarker Template Language)。FTL 是一种简单的、专用的语言,它不是像 Java 那样成熟的编程语言。在模...

huangjhai的博客 4043

FreeMarker template使用

赋值:<#assign val = 10> 输出:${val} 算数运算: <#-- 支持"+"、"-"、"*"、"/"、"%"运算符 --> <#assign number1 = 10> <#assign number2 = 5> "+" : ${number1 + number2} "-" : ${number1 - number2} "*" : ${number1 * number2} "/".

weixin_38320510的博客 6571

【Freemarker】Freemarker简介以及基本使用

【Freemarker】Freemarker简介以及基本使用1. 什么是Freemarker?2. Freemarker 快速入门2.1 环境搭建2.2 创建模板文件2.3 生成文件3. Freemarker 基本指令3.1 assign 指令3.2 if 指令3.3 list 指令3.4 include 指令4. 联合使用指令5. 常用内建函数6. 处理不存在的变量 1. 什么是Freemarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网

来日浅谈的博客 3159

FreeMarker使用

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。是一个Java类库。模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言,不是像PHP那样成熟的编程语言。那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

2301_76608606的博客 1052

freemarker的使用

之前写过一篇freemarker的模板语法,今天这篇博客是专门记录freemarker如何使用的 freemarker模板语法 点击跳转 首先,导入freemarker的jar包 org.freemarker freemarker 2.3.23 Java代码步骤: 第一步:创建一个Configuration对象,直接new

东天里的冬天 1467

freemarker的使用心得,freemarker使用心得

freemarker目前虽然使用的公司不多,但是在某些时候就必须使用,当需要遍历json数据的时候,目前市面上的好多显示组件都达不到要求唯一能用的也就只有freemarker了。在java里使用的模板引擎有velocity、freemarker,至于velocity由于比较古老加之功能也不及freemarker那么强大使用的人群已经很少了。这次打算系统性的分享我学习freemarker的心得。

LANGZI7758521的专栏 3283

FreeMarker基础使用

一、装配使用 1、导入依赖 <!--SpringBootFreemarker模板依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> 2、在properties里进行配置 ##Freemarker配置 #

qq_57404736的博客 1637

springboot如何使用Freemarker模版引擎

1.Freemarker介绍 Freemarker是三大主流模版引擎之一,与Jsp,Velocity并称“三剑客“。 2.Freemarker集成方案 ①在pom.xml中添加依赖 <!-- freemarker 依赖 --> <dependency> <groupId>org.springframework.boot</groupI...

蔡定努 725
上一篇: MySQL的基本使用
小李飞刀
博客等级 码龄24年 16粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值