freemarker使用(如何在freemarker中调用java的方法)

本文目录
- 如何在freemarker中调用java的方法
- “freemarker” 是什么意思
- freemarker如何使用
- freemarker怎么使用CSS样式表以及JS文件
- 什么是 FreeMarker
- 如何使用freemarker框架,将不同模板生成的内容整合到一个word文档中
如何在freemarker中调用java的方法
1 要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口或 TemplateMethodModelEx接口
参考示例如下:
java 代码:
public class Object2HashMap implements TemplateMethodModelEx {
private static final Logger logger = LoggerFactory.getLogger(Object2HashMap.class);
@SuppressWarnings({ “rawtypes“, “unchecked“ })
@Override
public Object exec(List arguments) throws TemplateModelException {
Collection collection = (Collection) DeepUnwrap.unwrap((TemplateModel) arguments.get(0));
String keyProperty = arguments.get(1).toString();
String valueProperty = arguments.get(2).toString();
HashMap result = new HashMap();
if (collection == null) return result;
for (Object object: collection) {
try {
Object key = PropertyUtils.getProperty(object, keyProperty);
Object value = PropertyUtils.getProperty(object, valueProperty);
result.put(key, value);
} catch (Exception e) {
logger.error(“处理异常“, e);
}
}
return result;
}
}
freemarker使用示例,通过new()创建该对象。参考示例是 将wsdl的扩展字段 key,value值放到HashMap中。
《#assign
chineseAmount = “com.ccic.gateway.core.freemarker.encoder.ChineseAmountEncoder“?new()
object2hash = “com.ccic.gateway.core.freemarker.encoder.Object2HashMap“?new()
insuredExtendHash = object2hash(payload.responseBody.policy.extend, “key“, “value“)
》
取值:${(insuredExtendHash.ApproverCName)!}
“freemarker” 是什么意思
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。
在所有采用网页静态化手段的网站中,FreeMarker使用的比例大大的超过了其他的一些技术。HTML静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以使用FreeMarker将HTML静态化。比如一些网站的公用设置信息,这些信息基本都是可以通过后台来管理并存储在数据库中,这些信息其实会大量的被前台程序调用,每一次调用都会去查询一次数据库,但是这些信息的更新频率又会很小,因此也可以考虑将这部分内容进行后台更新的时候进行静态化,这样就避免了大量的数据库访问请求,从而也就提高了网站的性能。
与JSP相比,FreeMarker的一个优点在于不能轻易突破模板语言开始编写Java代码,因此降低了领域逻辑漏进视图层的危险几率。但缺点是需要一点附加配置来将其平稳地集成到应用程序中,一些IDE(集成开发环境)可能并不完全支持它,当然还有开发者或设计者也许需要学习一门陌生的模板语言。相关的JAR文件将要添加到WEB-INF/lib(在需要的时候,它们包含在Spring中)。
freemarker如何使用
1.在lib中加入freemarker的包
2.在文件templates创建一个文件 test.ftl
内容为:
${name},你好,${msg}
3.创建类4个步骤,具体看类中的使用
package abin;
import java.io.File;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* 模板文件(hello,${name})+数据模型(name=“******“)----------经过FreeMarker整合----输出(hello,******)
* 经过4个步骤,见下面
* @author chenhaibin
*
*/
public class HelloFreeMarker
{
private Configuration conf;
//1 创建Configuration实例,该实例负责管理FreeMarker的模板加载路径
public void first() throws Exception
{
conf=new Configuration();
//放置test.fsl文件的路径
conf.setDirectoryForTemplateLoading(new File(“templates“));
}
private Template t;
//2 使用Configuration实例生成Template实例,同时加载指定的模板文件
public void second() throws Exception
{
t=conf.getTemplate(“test.ftl“);
}
private Map datamap;
//3 填充数据模型
public void third()
{
datamap=new HashMap();
datamap.put(“name“, “chenhaibin“);
datamap.put(“msg“, “欢迎使用FreeMarker!“);
}
//4 合并处理
public void four() throws Exception
{
t.process(datamap, new OutputStreamWriter(System.out));
}
public static void main(String args) throws Exception
{
HelloFreeMarker hfm=new HelloFreeMarker();
hfm.first();
hfm.second();
hfm.third();
hfm.four();
}
}
4.结果是:
chenhaibin,你好,欢迎使用FreeMarker!
freemarker怎么使用CSS样式表以及JS文件
freemarker文件还是html代码占多数,即使是freemarker代码,也会经过服务器翻译成html代码返回到浏览器端,所以说,你可以在freemarker文件里,直接用html的语法引入CSS和JS。
说白了,freemarker只是辅助你写html文件而已,你当做写html文件就行了,不用想那么复杂。
如下代码,只有标记到的地方是freemarker语法,其余都是html语法
《!DOCTYPE html》
《html lang=“zh-CN“》
《head》
《meta charset=“utf-8“》
《!-- 这句是freemaker --》
《title》${webSite.title!}《/title》
《!-- 这句的base是freemaker,其余不是 --》
《script src=“${base}/resource/plugin/require/require.js“》《/script》
《/head》
《body》
《!-- 这句的user.name是freemaker,其余不是 --》
《h1》欢迎您,${user.name}《/h1》
《!-- 这句是freemaker --》
《#include “body.html“》
《/body》
《/html》
什么是 FreeMarker
它是一个Java package,面向Java程序员的class library。它本身并不是针对最终用户的应用,而是允许程序员将其嵌入到他们的产品中。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC(Model View Controller)模式的应用程序。使用 MVC 模式作为动态的WEB页面的想法,是为了分隔页面设计者 (HTML 设计者) 和程序员。.每个人做自己擅长的那一部分。设计者可以不通过程序员的改变或修改代码来改变网页的样子,因为应用逻辑(Java程序)和页面设计(FreeMarker 模版)是分开的。模板不会被复杂繁琐的程序框架所 破坏。即使当一个项目的程序员和 HIMTL页面的制作者是同一个人时,这种分隔也是很有用,因为这样有助于保持应用的清晰并易于维护。 尽管FreeMarker有一些编程的能力,但它并不是一个象PHP那样的成熟的编程语言。与Java不同的是,Java程序准备用来显示的数据(如 SQL queries) ,而Freemarker仅是生成文本页,这个文本页显示用于模板的预备数据。 FreeMarker不是一个Web应用框架,而更适合充当Web应用框架里的一个组件的角色,但FreeMarker引擎本身对HTTP或servlets并不关心,它仅仅是生成文本。在非Web应用环境中它同样能够展示完美的用途。然而值得注意的是:我们为使用FreeMarker提供了方便的解决方案,作为Model2框架(如Struts)的视图组件,你也可以在模版中使用JSP标签。 FreeMarker是免费的,有 BSD-style license Servlet运行于Java-enabled Web Server中。 Java Servlet 可以动态地扩展Server的能力,并采用请求-响应模式提供Web服务。 最早支持Servlet技术的是JavaSoft的Java Web Server 。此后,一些其它的基于Java的Web Server开始支持标准的
如何使用freemarker框架,将不同模板生成的内容整合到一个word文档中
首先,通过xml模板可以将基本上所有的格式都事先锁定,包括页码和分页,只要你事先预设好就能够通过freemarker实现生成,接下来就是我这个问题了,目录怎么解决,下面是解决思路:1:目录的内容可以根据之前其他的内容一样解决,通过XML模板预先设置好,2:目录的页码已经研究过是不能直接通过xml模板实现动态对应了(至少我没搞定0.0)3:由于不能够一步到位,我采取了在模板中预留了一页空白页,只留了抬头的目录两个字,然后通过查询目录二字进行目录的生成,这个功能也是我刚刚折腾出来的0.0目前还没测试能不能用模板生成目录后再更新目录0.0,不过想想可以直接生成目录应该就不用这么麻烦了,至于word生成后的修改0.0我觉得还是以后再说吧..整体来说应该还算完美解决了,代码我就不在这贴出来了~虽然中间折腾了半天走了半天弯路~讲道理还是用的jacob来实现的。

更多文章:
androidapp源码免费下载(如何实现APK的反编译得到APK的源码)
2026年9月22日 18:00
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30





