FreeMarker概要
FreeMarker是一款模板引擎,即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Languager(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意要展示什么数据。
FreeMarker配置
maven项目添加POM依赖:
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.1.6.RELEASE</version> </dependency> |
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <!--是否启用缓存 --> <property name="cache" value="true" /> <!--自动添加到路径中的前缀 --> <property name="prefix" value="" /> <!--自动添加到路径中的后缀 --> <property name="suffix" value=".html" /> <!--指定视图渲染类 --> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> <!-- 设置是否暴露Spring的macro辅助类库,默认为true --> <property name="exposeSpringMacroHelpers" value="true" /> <!-- 是否应将所有request属性添加到与模板合并之前的模型。默认为false。 --> <property name="exposeRequestAttributes" value="true" /> <!-- 是否应将所有session属性添加到与模板合并之前的模型。默认为false。 --> <property name="exposeSessionAttributes" value="true" /> <!-- 在页面中使用${rc.contextPath}就可获得contextPath --> <property name="requestContextAttribute" value="rc" /> <!--设置所有视图的内容类型,如果视图本身设置内容类型视图类可以忽略 --> <property name="contentType" value="text/html;charset=UTF-8" /> <!-- 优先级,越小越前 --> <property name="order" value="1" /> </bean> |
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/html" /> <!-- 模板路径 --> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">5</prop><!-- 刷新模板的周期,单位为秒 --> <prop key="defaultEncoding">UTF-8</prop><!--模板的编码格式 --> <prop key="url_escaping_charset">UTF-8</prop><!--url编码格式 --> <prop key="classic_compatible">true</prop> <!--此属性可以防止模板解析空值时的错误 --> <prop key="locale">zh_CN</prop> <!--该模板所使用的国际化语言环境选项--> <prop key="boolean_format">true,false</prop> <!--布尔值格式--> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <!--日期时间格式--> <prop key="time_format">HH:mm:ss</prop><!--时间格式--> <prop key="number_format">0.######</prop><!--数字格式--> <prop key="whitespace_stripping">true</prop><!--自动开启/关闭空白移除,默认为true--> </props> </property> </bean> |
FreeMarker标签
输出标签
输出散列变量:${ModelKey}
字符串常用操作:
${ModelKey?html} 对HTML进行编码(替换特殊符号)
${ModelKey?cap_first} 首字母大写
${ModelKey?lower_case} 字符串转小写
${ModelKey?upper_case} 字符串转大写
${ModelKey?trim} 首位去空格
数字类型常用操作:
${ModelKey?int} 显示转换成int类型
日期类型常用操作:
${ModelKey?string("yyyy-MM-dd HH:mm:ss")} 格式化时间
获取会话级变量Session中的值:
${Session.key}
判断标签
<#if(score>=90)>
优秀
<#elseif(score>=80)>
良好
<#elseif(score>=70)>
中等
<#elseif(score>=60)>
及格
<#else>
不及格
</#if>
遍历标签
<#list products as prod>
<tr>
<td>${prod.prodSn}</td>
<td>${prod.prodName}</td>
<td>${prod.prodPrice}</td>
<td>${prod.prodStock}</td>
<td>${prod.prodSale}</td>
</tr>
</#list>
导入标签
<#include "url"/>
生成静态页面
public static void buildPage( String modulePath, String moduleFile, String targetPath, Map map ) throws Exception{ // 生成Freemarker模板配置对象 Configuration configuration = new Configuration(); // 设置模板加载器 configuration.setDirectoryForTemplateLoading(new File(modulePath)); // 设置编码格式 configuration.setDefaultEncoding("UTF-8"); // 获取或创建一个模版。 Template template = configuration.getTemplate(moduleFile); // 设置文件输入流编码,不然生成的html文件会中文乱码 FileWriterWithEncoding out = new FileWriterWithEncoding(targetPath,"UTF-8"); // 开始生成静态页面 template.process(map, out); out.close(); } |