• FreeMarker学习系列之一


    一. 基本概念

    • ${...}: FreeMarker将会输出真实的值来替换大括号内的表达式,这样的表达式插值

    • FTL 标签 (FreeMarker模板的语言标签): FTL标签和HTML标签有一些相似之处,但是它们是FreeMarker的指令,是不会在输出中打印的。 这些标签的名字以 # 开头。(用户自定义的FTL标签则需要使用 @ 来代替 #)

    基本指令

    if指令

    使用 if 指令可以有条件地跳过模板的一些片段。 

     1 <html>
     2 <head>
     3   <title>Welcome!</title>
     4 </head>
     5 <body>
     6   <h1>
     7     Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!
     8   </h1>
     9   <p>Our latest product:
    10   <a href="${latestProduct.url}">${latestProduct.name}</a>!
    11 </body>
    12 </html>
    1 <#if animals.python.price < animals.elephant.price>
    2   Pythons are cheaper than elephants today.
    3 <#else>
    4   Pythons are not cheaper than elephants today.
    5 </#if>

    list 指令

    当需要列表显示内容时,list指令是必须的.list 指令的一般格式为: <#list sequence as loopVariable>repeatThis</#list>

    1 <ul>
    2     <#list misc.fruits as fruit>
    3       <li>${fruit}</li>
    4     </#list>
    5 </ul>

    上面示例中的一个问题是如果我们有0个水果,它仍然会输出一个空的 <ul></ul>,而不是什么都没有。 要避免这样的情况,可以这么来使用 list

    1 <#list misc.fruits>
    2       <ul>
    3         <#items as fruit>
    4           <li>${fruit}
    5         </#items>
    6   </ul>
    7 </#list>

    include 指令

    使用 include 指令, 我们可以在模板中插入其他文件的内容

    我们可以将版权信息单独存放在页面文件 copyright_footer.html 中:

    1 <hr>
    2 <i>
    3     Copyright (c) 2000 <a href="http://www.acmee.com">Acmee Inc</a>,
    4     <br>
    5     All Rights Reserved.
    6 </i>

    当需要用到这个文件时,可以使用 include 指令来插入:

     1 <html>
     2     <head>
     3       <title>Test page</title>
     4     </head>
     5     <body>
     6       <h1>Test page</h1>
     7       <p>Blah blah...
     8       <#include "/copyright_footer.html">
     9     </body>
    10 </html>    

    处理不存在的变量

    这部分对程序员而言: 一个不存在的变量和一个是 null 值的变量, 对于FreeMarker来说是一样的,所以这里所指的"丢失"包含这两种情况。

    不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况, 通过在变量名后面跟着一个 !和默认值。

    eg:当 user 不存在于数据模型时, 模板将会将 user 的值表示为字符串 "visitor"。(当 user 存在时, 模板就会表现出 ${user} 的值):

     1 <h1>Welcome ${user!"visitor"}!</h1> 

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

     1 <#if user??><h1>Welcome ${user}!</h1></#if> 

    在实际应用中,表示menus存在同时menus的长度size必须大于0

     FTL是区分大小写的。 list 是指令的名称而 List 就不是。类似地 ${name} 和 ${Name} 或 ${NAME} 也是不同的。

  • 相关阅读:
    [SCOI2016] 幸运数字
    [CF438E] 小朋友和二叉树
    【题解】[AHOI2013]作业
    【题解】CF940F Machine Learning
    【题解】CF1207E XOR Guessing
    【题解】CF1228D Complete Tripartite
    【题解】CF1290B Irreducible Anagrams
    【题解】[JSOI2007]字符加密
    【题解】[SDOI2016]征途
    【题解】多边形染色
  • 原文地址:https://www.cnblogs.com/seanRay/p/11954713.html
Copyright © 2020-2023  润新知