Freemarker 的基础使用 (二)
freemarker 的基础使用二
ftl 文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<#-- 定义变量-->
<#assign username="张三">
${username}
<#-- 如果定义相同的 变量, 变量的值会被覆盖, 会以最后的值为准-->
<#assign num=10>
${num+11}
<#assign b=true>
<#-- 不能直接输出数字或者字符串以外的东西 否则都会报错, 需要转化成字符串才能输出, 使用 XXX?string 可以完成字符串的转换-->
${b?string}
<#-- 这里三个问号 :前两个 判断是否为空, 后一个按照String输出 后面这个括号可有可无, 如果没有的话,就按照
本值输出, 如果有的话, 类似于三目运算逻辑, 进行替换输出
-->
${(a.ss)???string("true","false")}
<#-- 时间输出 日期不能直接输出, 需要转换成字符串 按照括号后面的格式进行输出-->
${now?string("yyyy-MM-dd HH:mm:ss")}
<#-- 字符串输出拼接 两种方式-->
${" welcome:"+username}
${"welcome:${username}"} <#-- 字符串转换成日期
date 用来转换日期, datetime 用来转换日期时间, time用来转换时间
-->
${"1979-25-45"?date("yyyy-MM-dd")}
<#assign bir = "1997-03-04 12:34:23"?datetime("yyyy-MM-dd HH:mm:ss")>
${"字符串转时间"+bir}
</body>
</html>
@Test
public void test07(){
Map<String,Object> root = new HashMap<String, Object>();
root.put("now", new Date());
frr.print("07.ftl", root);
} @Test
public void test06(){
// 此时 user 对象没有group的值, 如果前台要取值,就会报错, freemarker 不具备处理空值
// 需要自己处理空值
Map<String,Object> root = new HashMap<String, Object>();
root.put("user",new User(1, "地点", 19));
frr.fprint("06.ftl", root, "06.html");
}
Freemarker 的基础使用 (二)的更多相关文章
- Linux基础练习题(二)
Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
- RequireJS基础(二)
上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute. RequireJS使用define来定义 ...
- Servlet基础(二) Servlet的生命周期
Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...
- 好好写,好好干-PHP基础(二)
hi 好久没写,昨儿一写,感觉还是有人看的,至少是有一两个评论的~~好好干! 每天需要坚持的就那么4件事儿:写这个,学一点法语,看会儿书,锻炼.单身狗也有好处. 1.PHP 一.PHP基础(二) 1. ...
- php基础篇-二维数组排序 array_multisort
原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...
- MySQL基础(二)——DDL语句
MySQL基础(二)--DDL语句 1.什么是DDL语句,以及DDL语句的作用 DDL语句时操作数据库对象的语句,这些操作包括create.drop.alter(创建.删除.修改)数据库对象. 2.基 ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
随机推荐
- call,apply,bind详解
为什么要改变this指向? 我们知道bind,call,apply的作用都是用来改变this指向的,那为什么要改变this指向呢?请看下面的例子: var name="lucy"; ...
- H3C 虚拟模板方式配置PPP MP
- 京东基于Spark的风控系统架构实践和技术细节
京东基于Spark的风控系统架构实践和技术细节 时间 2016-06-02 09:36:32 炼数成金 原文 http://www.dataguru.cn/article-9419-1.html ...
- H3C 路由计算
- linux ioctl 系统调用预定义的命令
尽管 ioctl 系统调用最常用来作用于设备, 内核能识别几个命令. 注意这些命令, 当用 到你的设备时, 在你自己的文件操作被调用之前被解码. 因此, 如果你选择相同的号给一 个你的 ioctl 命 ...
- js简单实现promise
function myPromise(fn){ let status='pending',successCallback=[],failedCallback=[],data=null,reason=n ...
- Qt串行化的输入和输出(使用QDataStream读写QByteArray,对QIODevice直接起作用)
参考https://lug.ustc.edu.cn/sites/qtguide/ 今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来. 串行化(Serialization)是计算机科学中的一个 ...
- QT中加载动态链接库
一.添加第三方的头文件 这个问题再简单不过了,不过我还是要说下. 首先,添加头文件 #include "ControlCAN.h" 然后,再将这个头文件放到工程的目录下,就OK了 ...
- 如何使用IoTSharp对接ModBus?
提到对接ModBus 那么或许大家最熟悉的可能是 HslCommunication 和SharpSCADA 了,是GitHub 上关注最多的此类开源项目, 因此IoTSharp将通过HSL组件进行数 ...
- 使用 Visual Studio Code 进行远程开发
使用 Visual Studio Code 进行远程开发 在完成了 AT 指令入门的学习之后,接下来就要使用 AT 指令进行 Socket 通信了.问题在于,之前 .NET 的 Socket 编程只需 ...