首页天道酬勤freemarker使用教程,layui菜鸟教程

freemarker使用教程,layui菜鸟教程

张世龙 05-12 18:39 87次浏览

另一方面,认识到FreeMarker FreeMarker是模板引擎。 是基于模板生成输出文本的通用工具。 模板引擎包括Velocity、Common Template等。

对于java web开发,可以使用FreeMarker模板将java代码与页面分离。 开发人员只需要关注业务逻辑代码,页面设计人员只需要设计成显示效果,两种类型的人员就能各自发挥作用,发挥出擅长的一面。

FreeMarker注释:类似于HTML的注释,用#----和---分隔。 FreeMarker将忽略这两个分隔符(包括分隔符本身)之间的任何分隔符,既不执行也不输出。

二、常用命令if指令if命令进行条件输出控制,类似于程序语言的if语句。

格式:

# ifcondition content/# if # ifcondition content # elseothercontent/# if示例:

#if username=='boss'Hi boss! /#if#if username=='boss'Hi boss! #elseHi! /#if

说明:上述示例表示如果变量username的值为“boss”,则输出Hi boss! 否则输出Hi!

==是确定两侧值相等的运算符,比较结果为布尔值、true或false。==的左侧是引用的变量,右侧是指定的字符串。

注意:右边字面的量可以是字符串,也可以是数字。 对于字符串,必须用引号(可以是单引号,也可以是双引号)括起来,==左右类型匹配。 如果不一致,将发生错误。

list指令list命令用于遍历集合中的内容。

格式:

# listvarsasvarrepeatcontent/# list示例:

#list [ '星期一'、'星期二'、'星期三' ] as day${day}/#list

说明:上例输出3行,每行按星期一、星期二、星期三的顺序输出。

集合中的元素可以是简单字符串,也可以是复杂对象,如上例所示

assign命令assign命令用于定义变量并为其赋值,或替换原始变量的值

格式:

# assign name=value [ name1=value1. ] # assignnamecapturethis/# assign示例:

#assign username='master '

说明:

后者的形式是复杂的使用方法。 将assign对的内容输出为name变量的值

可以使用33558www.Sina.com/include命令将其他文件的内容插入到当前模板中。

格式:

#include 'filepath '

示例:

# include '/copyright _ footer.html '

说明:

所捕获的文件可以是静态页或动态页,也就是说,它可以是ftl模板。 在与数据模型组合输出之前,include命令将文件内容包含在当前模板中。

如果未定义变量的处理或值为null变量未定义,或者值为null,则默认情况下FreeMarker报告错误。 有两种处理方法

1 .设置默认值

格式:

${varname! default_value}示例:

$ {用户! ' visitor'}${apple.price! 0 )说明:有关多级访问变量,如animals.python.price,请编写代码: ${animals.python.price! 0}、animals或python不存在时,模板处理过程将因“未定义的变量”错误而停止。 为了防止这种情况发生,可以这样编写代码${(animals.python.price )! 0 )。 在这种情况下,如果animals或python不存在,表达式的结果将保留为0。

2 .加if判断

格式:

#if varname? 内容/# if # if varname? 退出内容/# if示例:

#if user? Hi,${user}/#if#if user? 退出

>Hi,${user}</#if>

说明:

如果user变量存在,且值不为NULL时,才输出Hi,user变量值。同样对于多级访问的变量,??前面的变量名最好被()包含,原因参照!设置默认值。


3.修改全局配置

classic_compatible=true


当FreeMarker指定为"Classic Compatibile"(兼容经典)模式运作时,引擎将会按下列方式输出:

1.友好的处理未定义表达式(即不报错),所谓未定义表达式,就是指“expr”变量未定义,或值为null.

像<assign varname=expr>、${expr}、“otherexpr == expr”、“otherexpr != expr”、hash[expr]中expr未定义时当成空字符串对待

像<list expr as item>、<foreach item in expr>中expr未定义时,循环体不会执行(就像expr是一个空List一样)

像用在<if>指令中或作为布尔表达式时,空值将被当成是false来处理。非布尔数据模型或者逻辑操作数也可以放在<if>指令中,空模型(长度为零的字符串,空的数组或者hash集合)被当成是false来对待,其他情况下都被当成是true来处理。

2.布尔值被看作字符串时(比如用${...}输出,或者是和其他字符串连接时),true值将被转换成“true”字符串处理,false值将被转换成空字符串

3.传给<list>和<foreach>的标量模型被当成只包含一个该元素的list来处理。

4.<include>指令的路径参数将被作为绝对路径处理

三、常见操作汇总 直接指定值

字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者"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 + {"舒适的钥匙":"secret42"}

算数运算

(x * 1.5 + 10) / 2 - y % 100

比较运算

x == y, x != y, x < y, x > y, x >= y, x <= y, x &lt; y, x &gt; y 等等

逻辑操作

!registered && (firstVisit || fromEurope)

内建函数

name?upper_case

方法调用

repeat("What", 3)

处理不存在的值

指定默认值:name!"unknown" 或name! 多级访问变量(user.name)!"unknown" 或者 (user.name)!
检测不存在的值:name?? ,(user.name)??

四、数字格式化问题

当数字超过3位的时候,默认输出会自动带上逗号。例如2000,会显示为2,000。还有当小数位数超过3位时,默认只显示小数点后3位。例如1.33213,会显示为1.332;1.33253,会显示为1.333;

如何解决呢?

1> 加?c,即转成字符串,如:${userId?c}

2> 修改配置文件freemarker.properties加上number_format=#

五、格式化输出

${xx?c} //转成字符串显示
${xx?string.number}//按数字显示
${xx?string.currency}//按贷币格式显示
${xx?string.percent} //按百分比格式显示

六、去空格

${xx?trim}

七、格式化日期

${date?string("yyyy-MM-dd HH:mm:ss")}
${date?string("yyyyMMdd")}

wps初学者入门教程,freemarker过时了吗 html自动整理代码快捷键,freemarker常用标签