×
文章路径: Java

freemarker使用BeansWrapper获取静态类型和枚举类型

发表于1年前(Mar 9, 2017 3:54:36 PM)  阅读 1487  评论 0

分类: Java

标签: freemarker 静态类 枚举类 BeansWrapper getStaticModels getEnumModels BeansWrapperBuilder

之前笔者写过一篇文章:Freemarker使用java枚举值、静态属性和调用静态方法,这篇文章里面所提及的方法可以使用,只是笔者最近查找资料看freemarker官方文档的时候,发现笔者之前使用的方法并不是freemarker官方所推荐的方法。

freemarker的设计者,在设计时,分别给静态类和枚举类提供了不同的获取方法。

添加静态方法:

BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
TemplateHashModel staticModels = wrapper.getStaticModels();
TemplateHashModel fileStatics =
    (TemplateHashModel) staticModels.get("java.io.File");
root.put("File", fileStatics);

在模板文件使用静态方法:

<#list File.listRoots() as fileSystemRoot>...</#list>

添加枚举方法:

BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
TemplateHashModel enumModels = wrapper.getEnumModels();
TemplateHashModel roundingModeEnums =
    (TemplateHashModel) enumModels.get("java.math.RoundingMode");
root.put("RoundingMode", roundingModeEnums);

在模板文件使用枚举方法:

${RoundingMode.UP}

另外,如果有很多枚举类,可以直接使用一个变量来访问:

root.put("enums", BeansWrapper.getDefaultInstance().getEnumModels());

在模板中使用:

${enums["java.math.RoundingMode"].UP}

可以看到,实际上静态类和枚举类在使用上没有太大差别。

还要说一句的是,笔者现在使用的freemarker版本是2.3.25,BeansWrapper.getDefaultInstance()方法提示已经过时,替换成使用下面的方法了:

new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build()

freemarker官方文档原文地址:http://freemarker.org/docs/pgui_misc_beanwrapper.html

发表评论