坦途的博客

vuePress-theme-reco 坦途    2022
坦途的博客 坦途的博客
主页
文章
  • Others
  • Back-end
  • Essay
标签
时间轴
关于我
联系我
  • GitHub (opens new window)
author-avatar

坦途

4

Article

2

Tag

主页
文章
  • Others
  • Back-end
  • Essay
标签
时间轴
关于我
联系我
  • GitHub (opens new window)

示例二

vuePress-theme-reco 坦途    2022

示例二

坦途 2020-11-11 Freemarker

# 什么是 FreeMarker?

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

# FreeMarker特性

# 1、通用目标

能够生成各种文本:HTML、XML、RTF、Java源代码等等

易于嵌入到你的产品中:轻量级;不需要Servlet环境

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

# 2、强大的模板语言

所有常用的指令:include、if/elseif/else、循环结构

在模板中创建和改变变量

几乎在任何地方都可以使用复杂表达式来指定值

命名的宏,可以具有位置参数和嵌套内容

名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突

输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换

# 3、通用数据模型

FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示

你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰

# 4、为Web准备

在模板语言中内建处理典型Web相关任务(如HTML转义)的结构

能够集成到Model2 Web应用框架中作为JSP的替代

支持JSP标记库

为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员

# 5、智能的国际化和本地化

字符集智能化(内部使用UNICODE)

数字格式本地化敏感

日期和时间格式本地化敏感

非US字符集可以用作标识(如变量名)

多种不同语言的相同模板

# 6、强大的XML处理能力

<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树

在模板中清楚和直觉的访问XML对象模型

# Freemarker的使用方法

把freemarker的jar包添加到工程中。 Maven工程添加依赖

<!--freemarker-->
	<dependency>
		<groupId>org.freemarker</groupId>
		<artifactId>freemarker</artifactId>
		<version>2.3.23</version>
	</dependency>
1
2
3
4
5
6

# Freemarker 语法总结

# 1、list的大小判断

<#if (list?size>0)>
</#if>
1
2

# 2、布尔判断

<#if bb == true>
</#if>
1
2

# 3、list 里面的index ${item_index}

# 4、list<map<string,list>>

<#list list as map>
    <#list map?keys as key>  
        <#if key== "货物">
            <#list map[key] as item>
                <tr>
                    <td style="text-align: center">${item_index+1}</td>
                </tr>
            </#list>
        </#if>
    </#list>
</#list>
1
2
3
4
5
6
7
8
9
10
11

# 5、直接当参数${item.id}

<a class="btn btn-default btn-xs" id="button"
   href="../index?id=${item.id}" >新建商品</a>
1
2

# 6、与三元运算符结合使用

<td style="text-align: center">${((item.is_tem!)==1)?string('是','否')}</td>
1

# 7、直接在js中使用

$("select[name='is_tmp']").find("option[value='${is_tmp!}']").attr("selected", "selected");
1

# 8、有值显示(非空判断)

<td style="text-align: center">${item.city!}</td>
1

# 9、?? 判断左侧的变量,相当于java中的null的判断,或者这个变量是否未定义。

<#if data.page_no ??>
</#if>
1
2

# 10、macro(宏指令)

语法:

<#macro  变量名  参数>  
  <#nested/>  
</#macro>

<#--案例-->
<#macro getIndexPro c>
  <a href="${g.globalUrl}/html/column/${g.getNewone(c.id).source}">
    <div class="procontent main-img" style="background-image: url(${g.getNewone(c.id).cover})">
        <p class="eng">${g.getNewone(c.id).abstracts}</p>
    </div>
  </a>
</#macro>
1
2
3
4
5
6
7
8
9
10
11
12

调用:

<@macro_name param />

<#list articleChildren as c>
  <@getIndexPro c />
</#list>
1
2
3
4
5

# 11、function(函数指令)

语法:

<#function  变量名  参数>  
  <#return>  
</#function>

<#--案例-->
<#--封装截取字符串长度方法-->
<#function subtitle title>
  <#if title?length gt 10>
    <#return title?substring(0,10)+"...">
  <#else >
    <#return title>
  </#if>
</#function>
1
2
3
4
5
6
7
8
9
10
11
12
13

调用:

${function_name(param)}

${subtitle("sadsadsagjdsaf")}
1
2
3

# End

Over ~~~

欢迎来到我的博客
看板娘