freemarker学习笔记《—》

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker通常用作view层组件,或者页面静态化。
FreeMarker标签
  Html:最简单的模板是普通HTML文件(或者是其他任何文本文件—FreeMarker本身不属于HTML)。当客户端访问页面时,FreeMarker要发送HTML代码至客户端浏览器端显示。如果想要页面动起来,就要在HTML中放置能被FreeMarker所解析的特殊部分。
   ${…}:FreeMarker将会输出真实的值来替换花括号内的表达式,这样的表达式被称为interpolations插值,可以参考第上面示例的内容。
  FTL tags标签(FreeMarker 模板的语言标签):FTL标签和HTML标签有一点相似,但是它们是FreeMarker的指令而且是不会直接输出出来的东西。这些标签的使用一般以符号#开头。(用户自定义的FTL标签使用@符号来代替#,但这是更高级的主题内容了,后面会详细地讨论) 
 Comments注释:FreeMarker的注释和HTML的注释相似,但是它用<#--和-->来分隔的。任何介于这两个分隔符(包含分隔符本身)之间内容会被FreeMarker忽略,就不会输出出来了。  其他任何不是FTL标签,插值或注释的内容将被视为静态文本,这些东西就不会被FreeMarker所解析,会被按照原样输出出来。
  directives指令:就是所指的FTL标签。这些指令在HTML的标签(如和
)和HTML元素(如table元素)中的关系是相同的。(如果现在你还不能区分它们,那么把“FTL标签”和“指令”看做是同义词即可。
FreeMarker指令:
if指令:条件判断符号有==,>,< ,!=
<#if user=='zs'>hello
<#--大于一般要使用括号括起来防止和标签结束'>'冲突 -->
<#if (age > 12) >大于
<#if (age < 12) >小于
<#if name!='laowang' >其他人<#else>老王
list指令遍历集合
<#-- 遍历集合-->
<#list maps as person>
	${person.name} ${person.age}

<#-- 遍历集合maps第一个数据项中的strs-->
<#list maps[0].strs as str>
	${str}
include指令引入其它文件内容
<#-- 不可以加上''结尾 但可以 写成'<#include "/f.txt" />'-->
<#include "/f.txt" >

Freemarker处理不存在的变量:可以使用 “变量!默认值”,如果变量不存在则使用默认值,示例:
${bl!"marong"} 
在if指令中可以使用??判断
<#-- 如果存在ff-->
<#if ff??>
fuck marong
<#-- 如果不存在ff-->
<#else>
fuck song jj

测试代码:
public class FreemarkerService {
	
	private Configuration cfg; 
	
	@Before
	public void init() throws IOException {
		  cfg = new Configuration(); 
		  cfg.setDirectoryForTemplateLoading(new File("D:/workspace/fm/WebRoot"));
	}
	
	
	@Test
	public void testIf() throws Exception {
		Template t = cfg.getTemplate("n1.ftl");
		Map data = new HashMap();
		data.put("user", "zs");
		data.put("age", 13);
		data.put("name","laowang");
		List ps = new ArrayList();
		Person p1 = new Person();
		Person p2 = new Person();
		p1.setName("战三");
		p2.setName("张大侠");
		p1.setAge(22);
		String[] strs = {"2","4","7"};
		p1.setStrs(strs);
		p2.setAge(23);
		ps.add(p1);
		ps.add(p2);
		data.put("maps", ps);
		t.process(data, new OutputStreamWriter(System.out));
	}
}






你可能感兴趣的:(freemarker)