一般用来做界面 配置文件 还可以生成源代码(xml jsp也可以)比jsp运行效率高(因为不需要转换成java到class 是直接对模版进行解析 解析差值 把值插入然后返回页面数据)
springMVC使用时候需要的两个配置 将FreeMarkerViewResolver 放在InteralResourceViewResolver前面(order是0优先级最高 InteralResourceViewResolver的order是整数的最大值 所以先找FreeMarker 没有才找 jsp)
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!-- <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> -->
<property name="templateLoaderPaths">
<list>
<value>classpath:/ftl/</value> //FreeMarker可以在类路径下加载的!~
</list>
</property>
<property name="freemarkerSettings">
<props>
<prop key="defaultEncoding">UTF-8</prop>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"
p:prefix="/" p:suffix=".ftl">
<property name="cache" value="false" />
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="requestContextAttribute" value="base"></property>
<property name="order" value="0"></property>
</bean>
**
常用的语法
**
条件判断
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
<#else>
...
</#if>
循环 (序号:as后面的变量+_index )
<#list users as user>
${user.name}
</#list>
包含
<#include "xxxx.ftl">
一些常用的表达式:
${x.name?if_exists } 用于判断如果存在,就输出这个值
${x.name?default(‘xxx’)} 默认值xxx
${x.name!"xxx"} 默认值xxx
${x.date?string('yyyy-MM-dd')} 日期格式
s?html 对字符串进行HTML编码
s?cap_first 使字符串第一个字母大写
s?lower_case 将字符串转换成小写
s?trim 去掉字符串前后的空白字符
s?size 获得序列中元素的数目
**
freemarker生成java源码
用一个最简单的生成类的例子来说明 可以利用它使用一个java模块来快速生成所需要的代码 只要模块可以通用 就只需要自己准备好要插入的值
**
package ${packageName}.bean;
public class ${className} {
}
只要将值插入 就可以使用
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(ftl文件));
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
Map paramMap = new HashMap();
paramMap.put(你要插入的值);
paramMap.put(你要插入的值);
Template t = cfg.getTemplate("bean.ftl");
// 组合生成
Writer out = new OutputStreamWriter(new FileOutputStream(new File(ftl文件)), "UTF-8");
// 执行
t.process(paramMap, out);