FreeMarker-1

本文介绍了FreeMarker模板引擎的基本概念,包括数据模型、MVC模式、哈希表、序列访问等核心内容,并详细阐述了指令如if、list的使用方法及用户自定义指令的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 模板+ 数据模型= 输出

2、 MVC模式:Model-View-Controller的缩写,中文翻译为"模型-视图-控制器"。

3、 哈希表通过可查找的名称来访问存储的其他空间

4、 用数组的方括号方式来访问一个序列的子变量:animals[0].name;whatnot.fruits[1],索引通常从零开始。

5、 标量存储单一的值,这种类型的值可以是字符串,数字,日期/时间或者是布尔值。

6、 ${…}:FreeMarker将会输出真实的值来替换花括号内的表达式。

FTL tags标签(FreeMarker 模板的语言标签):这些标签的使用一般以符号#开头。(用户自定义的FTL标签使用@符号来代替#)。

Comments注释:FreeMarker的注释和HTML的注释相似,但是它用<#--和-->来分隔。

directives指令就是所指的FTL标签。这指令在HTML的标签(如<table>和</table>)元素(如table元素)中的关系是相同的

7、 使用if指令可以有条件地跳过模板的一部分,

 

我们尊敬的领导是if条件中那唯一的user变量值,当它和“Big Joe”相同时才显示出来。当condition的判断结果为false(布尔值)时,在<#ifcondition>和</#if>标签之间的内容将会被略过。

8、 使用<#else>标签可以指定当条件为假时程序可以执行的内容。  

9、 list指令的一般格式为:<#list sequence asloopVariable>repeatThis</#list>

            sequence:序列;repeatThis:在给定的sequence遍历时的每项中重复,从第一项开始,一个接着一个。

10、include指令:插入其他文件的内容到当前的模板中。 

   Include里面包含的是一个网址,显示的是网址里面的全部内容!

11、处理不存在变量

 

通过放置??在变量名后面来询问FreeMarker一个变量是否存在。将它和if指令合并,那么如果user变量不存在的话将会忽略整个问候代码段

12、数值

不需要存储的数值也可以称之为数值,例如:100 

当模板被执行时,计算的临时结果也称为数值,比如20,120(它会打印120)

 

14、支持的类型有:标量:字符串;数字;布尔值;日期

容器: 哈希表;序列;集

子程序:方法和函数;用户自定义指令

其它/很少使用:节点

15、方法和函数:

数据模型中放置了一个方法变量avg,求平均值:

16、用户自定义指令:

      假设现在有一个变量,box,它的值是用户自定义的指令,用来打印一些特定的HTML信息,这个指令定义了一个标题和其中的信息。    

17、如果能够实现,请用自定义指令而不用函数/方法

①、输出(返回值)的是标记(HTML,XML等)。主要原因是函数的返回结果可以自动进行XML转义(这是因为${…}的特性),而用户自定义指令的输出则不是(这是因为<@...>的特性所致,它的输出假定为是标记,因此就不再转义)。

②、副作用是重要的,而不是返回值。例如一个指令的目的是往服务器日志中添加一个条目。(事实上你不能得到自定义指令的返回值,但有些反馈的类型是有可能设置非本地变量的)

③、会进行流程的控制(就像listif指令那样),但是不能在函数/方法上这么做。

18、节点

   节点的主要作用是拓扑信息,还可以存储节点名称,类型(字符串),命名空间(字符串)。

19、模板的总体结构(FTL是区分大小写的)

    ①、Text文本:文本会照着原样来输出。

②、Interpolation插值:这部分的输出会被计算的值来替换。插值由${}所分隔

③、FTLtags标签:与HTML标签很相似,但它们却是给FreeMarker的指示且不会打印在输出内容中。

④、Comments注释:注释和HTML的注释很相似,但是由<#---->来隔的。

  注:FTL是区分大小写的,插值仅仅可以在文本中间使用(也可以在字符串表达式中)。FTL标签不可以在其他FTL标签和插值中使用。注释可以放在FTL标签和插值中间。

20、指令的调用:

     如调用list指令:在语法上使用了两个标签:<#list animals asbeing>和</#list>。

对于用户自定义的指令使用@来代替#。例如:<@mydirectiveparameters>...</@mydirective>

21、备忘单

㈠、直接指定值

①字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者 r"C:\raw\string"

②数字:123.45

③布尔值:true, false

④序列:["foo", "bar",123.45], 1..100

⑤哈希表:{"name":"green mouse","price":150}

㈡、检索变量

①顶层变量:user

②从哈希表中检索数据:user.name, user[“name”]

③从序列中检索:products[5]

④特殊变量:.main

㈢、字符串操作

①插值(或连接):"Hello ${user}!"(或"Free" + "Marker"

②获取一个字符:name[0]

㈣、序列操作

①连接:users + ["guest"]

②序列切分:products[10..19] products[5..]

③哈希表操作

④连接:passwords +{"joe":"secret42"}

㈤、算数计算: (x * 1.5 + 10) / 2 - y % 100

㈥、比较:x == y, x != y, x < y, x > y, x >= y, x <= y, x &lt; y, 等等

㈦、逻辑操作:!registered&& (firstVisit ||fromEurope)

㈧、内建函数:name?upper_case

㈨、方法调用:repeat("What", 3)

㈩、处理不存在的值

①默认值:name!"unknown" 或者(user.name)!"unknown"或者name! 或者 (user.name)!

②检测不存在的值:name?? 或者(user.name)??  

22、字符串

    如果文本本身包含用于字符引用的引号(双引号”或单引号’)或反斜杠时,应该在它们的前面再加一个反斜杠,这就是转义。   

23、FreeMarker所支持的所有的转义符序列  

一种特殊的字符串就是原生字符串。在原生字符串中,反斜杠和${没有特殊的含义,它们被视为普通的字符。为了表明字符串是原生字符串,在开始的引号或单引号之前放置字母r。

24、序列

   指定一个文字的序列,使用逗号来遍历子变量,然后把整个列表放到方括号内。

 输出:

25、哈希表

   在模板中指定一个哈希表,就可以遍历用逗号来分隔的“键/值”对,把列表放到花括号内。

   例如:{"name":"green mouse","price":150}。

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 和适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager 和 CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值