惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - №阿儒№

Inetinfo 进程 100%的解决方法 useless setTimeout call (missing quotes around argument?)解决方案 "invalid header field"解决方案 解决因为安装Lingoes 2.4后剪贴板无法正常工作的问题 Extjs分页时遇上ivalid label的解决原理 UTF8与UTF8 without BOM之间的问题 - №阿儒№ [错误解决列表]解决异常信息 收集中 解决WEB页的中英文显示问题 [bug]Upload Excel File时碰到的问题 [bug]解决因系统问题无法连接MQ reporting service学习-- 配置文件 [bug]访问ASP.NET临时文件夹的权限问题 如何解决FTP上传文件时出现的"Access is denied"错误? - №阿儒№ SQL Server 2005 Reporting Services 初次使用感受 [bug]Server Application Unavailable VS 中最简单的部署方式XCOPY Link Server的语法 [Bug]:创建虚拟目录出现别名已经存在的解决方案 将HTML中的内容存入WORD
FreeMarker学习
№阿儒№ · 2008-07-08 · via 博客园 - №阿儒№

上周花了一天在学FreeMarker,今天稍微整理了一下给自己做点笔记。

FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具。经常被设计用来生成WEB页面,特别是基于MVC

的应用程序。

FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念.他们是分工劳动的:

设计者专注于表示——创建HTML文件、图片、Web页面的其它可视化方面;

程序员创建系统,生成设计页面要显示的数据.

经常会遇到的问题是:在Web页面(或其它类型的文档)中显示的信息在设计页面时是无效的,是基于动态数据的,你可

以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker会在输出页面给最终用户时,用适当的数据替代这

些代码.

下图可以清晰的说明FreeMarker的模式:


从图上我们可以看出其模式为:模板 + 数据模型 = 输出

如果要学好FreeMarker,如果要深入FreeMarker的话,必须对其“模板”的语法进行举一反三的运用~~因为从其模式看来,“数据模型”对于程序员来说它并不陌生,无非就是些getset;而对于“输出”其实也不难。

那么如何运用这个模板 + 数据模型 = 输出 的模式呢?

首先是创建一个模板

 Configuration cfg = new Configuration();

cfg.setDirectoryForTemplateLoading(newFile("/where/you/store/templates"));

cfg.setObjectWrapper(new DefaultObjectWrapper()); 

2

创建数据模型

Map root = new HashMap();

root.put("user", "Big Joe");

Map latest = new HashMap();

root.put("latestProduct", latest);

latest.put("url", "products/greenmouse.html");

latest.put("name", "green mouse"); 

获得模板

 Template temp = cfg.getTemplate("test.ftl"); 

将模板与数据模型进行整合输出

Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush(); 

获得模板可以有多种方式,可以用setDirectoryForTemplateLoading也可以用setClassForTemplateLoading….第一种是直接设置一个存放模板的目录,而第二种是通过指定一个classpath进行设置,二种都是通过相对路径进行读取!

官方网站:http://freemarker.sourceforge.net/

官网快速入门(程序):http://freemarker.sourceforge.net/docs/pgui_quickstart.html