分享

FreeMarker入门

 太极混元天尊 2018-05-09

 一

概述

FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

 二
入门

模板 + 数据模型 = 输出:边看代码边解释


<head>
 <title>Welcome!title>

head>

 <h1>Welcome ${user}!h1>
 

Our latest product:
 <a href='${latestProduct.url}'>${latestProduct.name}a>!
body>
</html>

模板:

这里的user就是后台应该传给FreeMarker的模板文件,就像通常存放静态HTML页面那样。当有人来访问这个页面, FreeMarker将会介入执行,然后动态转换模板,用最新的数据内容替换模板中 ${...} 的部分。

数据模型:

这个user包含的所有属性组成数据模型。

+- user = 'Big Joe'
 |
 +- latestProduct
     |
     +- url = 'products/greenmouse.html'
     |
     +- name = 'green mouse'

当具备了这两个属性后就能动态的输出数据到当前页面了。

有小伙伴肯定有疑问user这个模板是怎么传到前台来的,我这先贴一个代码,后期细说,这里的user模板是通过model传递到前台去的。

public String seleWechatResources(Integer pageNum, Model model){
     PageInfo user= Service.getUserResources(pageNum , companyId);
     model.addAttribute('user' , user);
     return '/user_center/user';
 }


 三
结构


实际上用程序语言编写的程序就是模板。 FTL (代表FreeMarker模板语言)。 这是为编写模板设计的非常简单的编程语言。

模板(FTL编程)是由如下部分混合而成的:

  • 文本:文本会照着原样来输出。

  • 插值:这部分的输出会被计算的值来替换。插值由 ${ and } 。

  • FTL 标签:FTL标签和HTML标签很相似,但是它们却是给FreeMarker的指示, 而且不会打印在输出内容中。

  • 注释:注释和HTML的注释也很相似,但它们是由 <#-- 和 -->来分隔的。注释会被FreeMarker直接忽略, 更不会在输出内容中显示。

<html>[BR]
<head>[BR]
 <title>Welcome!title>
[BR]
head>[BR]
<body>[BR]
 <#-- Greet the user with his/her name -->[BR]
 <h1>Welcome ${user}!h1>[BR]
 <p>We have these animals:[BR]
 <ul>[BR]
 <#list animals as animal>[BR]
   <li>${animal.name} for ${animal.price} Euros[BR]
 #list>[BR]
 ul>[BR]
body>[BR]
html>

注意:

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

重点注意:插值仅仅可以在文本中使用。(也可以是字符串表达式)

FTL标签不可以在其他FTL标签和插值中使用。比如:这样做是错误的:<#if <#include 'foo'>='bar'>...

注释可以放在 FTL标签和插值中

 四

常用指令

1.list:list指令一般用来遍历集合数组和字符串。比如遍历map集合:

<#list industries?keys as key>
                           
='ui-checkbox'>
                               '' name='industryType' value='${key}' type='checkbox'
                                   <#list resourceWatcher.industryTypeArry as ind>
                                       <#if ind = key>
                                      checked
                                       #if>

                                   #list>
                               >
                               ${industries[key]}
                           
                       #list>

2.if:if指令用来判断逻辑。 比如:

<#if condition>
 ...
<#elseif condition2>
 ...
<#elseif condition3>
 ...
...
<#else>
 ...
#if>

3.import:格式:<#import path as hash>

概述:path:模板的路径。 这是一个算作是字符串的表达式。(简单说就是引入一个抽取出来的页面);hash:访问命名空间的哈希表变量不带引号的名字。不是表达式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多