freemarker调用方法,freemarker的使用
另一方面,公认的FreeMarker FreeMarker是一个模板引擎。它是一个基于模板生成输出文本的通用工具。模板包括Velocity、Common模板等。
对于java web开发,可以使用FreeMarker模板将java代码与页面分开。开发人员只需要关注业务逻辑代码,页面设计人员只需要设计展示效果,让两类人员各司其职,发挥他们好的一面。
FreeMarker注释:类似于HTML的注释,由# -和-分隔。FreeMarker将忽略这两个分隔符之间的任何分隔符(包括分隔符本身),既不执行也不输出。
二、常用命令
if指令
if命令用于条件输出控制,类似于编程语言的if语句。格式:
# if condition content/# if # if condition content # else content/# if示例:
#if username==boss 嗨boss!/#if#if username==boss 嗨boss!#埃尔塞希!/#如果
注意:上面的例子表明,如果变量username的值为“boss”,将输出Hi boss!否则,输出Hi!
==是判定两边值相等的运算符,比较结果为布尔型,真或假。==的左边是引用的变量,右边是指定的字符串。
注意:右边的文字量可以是字符串,也可以是数字。对于字符串,它们必须用引号括起来(单引号或双引号)。==左右类型匹配。否则,将会出现错误。
list指令
list命令用于遍历集合的内容。格式:
# listvarsasvarrepeatcontent/# list example:
#list [星期一,星期二,星期三]作为第${day}/#list
注意:上面的例子输出了3行,每行按照周一周二周三的顺序输出。
集合中的元素可以是简单的字符串,也可以是复杂的对象,如上例所示。
赋值命令赋值命令用于定义一个变量并给它赋值,或者替换原来变量的值。
格式:
# assignname=value [name1=value1。]# assignnamcapturethis/# assign示例:
#分配用户名=master
描述:
后一种形式是复杂的使用方法。将赋值对的内容作为name变量的值输出
可以使用33558www.Sina.com/include命令将其他文件的内容插入到当前模板中。
格式:
#包含“文件路径”
示例:
# include /copyright _ footer.html
描述:
捕获的文件可以是静态页面或动态页面,也就是说,它可以是ftl模板。include命令将文件内容包含在当前模板中,然后再与数据模型结合输出。
如果处理一个未定义的变量或值为null,FreeMarker默认报告一个错误。有两种治疗方法。
1.设置默认值。
格式:
${varname!默认值}的示例:
$ {用户!访问者 }${apple.price!0)描述:对于多级访问变量,比如animals.python.price,请编写代码:${animals.python.price!当0、动物或python不存在时,模板处理将由于“未定义变量”错误而停止。为了防止这种情况发生,可以这样写代码${(animals.python.price)!0 )。在这种情况下,如果动物或python不存在,表达式的结果将保持为0。
2.添加if判断
格式:
#if varname?Content /# if # if varname?退出内容/# if示例:
#如果用户?嗨,${user}/#if#if用户?放弃
您好,${user}/#if描述:
如果用户变量存在且其值不为空,则将输出hi和用户变量的值。对于具有相同多级访问权限的变量,前面的变量名最好由()包含。参考原因!设置默认值。
3.修改全局配置
classic_compatible=true
当FreeMarker被指定在“经典兼容”模式下运行时,引擎将输出如下:
1.友好地处理未定义的表达式(即没有错误)。所谓未定义表达式,是指“expr”变量未定义或者其值为空。
比如assign varname=expr,${expr},“otherexpr==expr”,“otherexpr!=expr ",当hash[expr]中的expr未定义时,将被视为空字符串。
当expr在List expr as item和foreach item中未定义时,将不执行循环体(就像expr是一个空列表一样)
当在if指令中使用或作为布尔表达式使用时,空值将被视为false。非布尔数据模型或逻辑操作数也可以放在if指令中。空模型(零长度字符串、空数组或散列集)被视为假,其他情况被视为真。
2.当一个布尔值被认为是一个字符串(如用$ {.}或者用其他字符串连接),真值会转换成“真”字符串,假值会转换成空字符串。
3.传递给list和foreach的标量模型被视为只包含其中一个元素的列表。
4.4.include指令的路径参数将被视为绝对路径。
三。通用操作摘要直接指定值字符串:“Foo”或“Foo”或“Its quoted”或“C:rawstring”
数量:123.45
布尔值:真,假
序列:[foo , bar ,123.45],1.100
哈希表:{ 名称:绿色鼠标,价格:150}
检索变量顶级变量:用户
从哈希表中检索数据:user.name,user ["name"]
从序列中检索:产品[5]
特殊变量:主要的
操作字符串插值(或串联):“Hello ${user}!”(或“自由”标记)
获取字符:名称[0]
串行连接:用户[guest]
序列分割:产品[10.19]或产品[5.]
哈希表操作连接:密码{ 舒适密钥: secret42}
算术运算(x * 1.5 10)/2-y% 100
比较运算x==y,x!=y,x y,x y,x=y,x=y,x lty,x gty,等等
逻辑运算!已注册(首次访问来自欧洲)
内置函数名?大写字母
该方法调用repeat(What ,3)
处理不存在的值指定默认值:name!“未知”或名称!多级访问变量(user.name)!“未知”或(用户名)!
检测不存在的值:名称?(用户名)?
四、数字格式问题当数字超过3位数时,默认输出会自动带逗号。例如,2000将显示为2000。当小数位数超过3位时,默认只显示3位小数。比如1.33213会显示为1.332;1.33253,将显示为1.333;
怎么解决?
1?c,即转换成字符串,比如${userId?C}2修改配置文件freemarker . properties plus number _ format=#
动词(verb的缩写)打印格式${xx?C} //转换为字符串显示
${xx?String.number}//按数字显示
${xx?String.currency}//以信用货币格式显示
${xx?string . percentage }//以百分比格式显示
六、去空间${xx?修剪}
七。格式化日期${date?string(yyyy-MM-dd HH:mm:ss)}
$ {日期?字符串( yyyyMMdd)}