spring下maven依赖
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>4.1.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
<version>2.3.20version>
dependency>
在applicationContent.xml配置
将视图获取器的bean配置为
<bean id="freeMarkerConfigurer"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/tpl/">property>
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">1prop>
<prop key="locale">zh_CNprop>
<prop key="datetime_format">yyyy-MM-ddprop>
<prop key="date_format">yyyy-MM-ddprop>
<prop key="number_format">#.##prop>
props>
property>
bean>
<bean id="freeMarkerViewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".tpl" />
<property name="contentType" value="text/html;charset=UTF-8" />
<property name="allowSessionOverride" value="true" />
<property name="allowRequestOverride" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="requestContextAttribute" value="request" />
bean>
在控制器直接返回视图
@RequestMapping("index")
public ModelAndView Select(SearchInfo searchInfo,ModelAndView modelAndView) {
modelAndView.setViewName("index");
try {
List list = (List) getMethod("select", SearchInfo.class).invoke(service, searchInfo);
modelAndView.addObject("list", list);
return modelAndView;
} catch (Exception e) {
return modelAndView;
}
}
在模板中
${user.name} 单值
<#list list as item > 遍历集合中的元素
"red">${item}
${item_index}//下标
#list>
${myDate?date} 日期
${myDate?time} 时间
${myDate?datetime} 时间戳
${objectArray[0]},${objectArray[1]},${objectArray[2]} 对象数组
key1=${map.key1},key2=${map.key2},key3=${map.key3} map访问
if判断
<#if strValue_index == 0>
<#elseif !strValue_has_next>
<#else>
#if>
swich
< #switch value>
< #case refValue>...<#break>
< #case refValue>...<#break>
< #default>...
< /#switch>
关于页面静态化
//在这里我将页面静态化的步骤放入了一个工具类中,让其作为一个静态方法,方便多次调用
public class PageStatic {
/**
* 静态化页面,将模板渲染后,生成一个真是存在的文件
* @param filePath 模板文件的路径
* @param templateName 模板文件的名字
* @param dataModelMap 要渲染的数据
* @param destPath 生成后的 文件的位置
* @throws Exception
*/
public static void staticPage(String filePath,String templateName,Map dataModelMap,String destPath) throws Exception {
// 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
Configuration configuration = new Configuration();
// 第二步:设置模板文件所在的路径。
configuration.setDirectoryForTemplateLoading(new File(filePath));
// 第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
// 第四步:加载一个模板,创建一个模板对象。
Template template = configuration.getTemplate(templateName);
// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
// Map dataModel = new HashMap();
// 向数据集中添加数据
// dataModel.put("hello", "this is my first freemarker test.");
// 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
Writer out = new FileWriter(new File(destPath));
System.out.println("已创建"+destPath);
// 第七步:调用模板对象的process方法输出文件
template.process(dataModelMap, out);
System.out.println("已输出");
// 第八步:关闭流。
out.close();
}
}
在控制器中使用
@RequestMapping("index")
public String Select(SearchInfo searchInfo,HttpServletRequest req) {
try {
//获取数据
List list = (List) getMethod("select", SearchInfo.class).invoke(service, searchInfo);
HashMap<String, List> map = new HashMap<String, List>();
map.put("list", list);
//获取模板所在的位置
File file = new File(req.getServletContext().getRealPath("/WEB-INF/ftl/"));
//静态化页面生成的位置
File destFile = new File(req.getServletContext().getRealPath("/staticHtml/"));
//静态化页面
String destPath = destFile.getPath()+"/index.html";
//生成静态页面
PageStatic.staticPage(file.getPath(), "index.ftl", map, destPath );
//重定向到静态化页面
return "redirect:/staticHtml/index.html";
} catch (Exception e) {
return "redirect:/staticHtml/index.html";
}
}