freemarker调用方法,freemarker的使用

  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)}

freemarker调用方法,freemarker的使用