首先,在我们使用FreeMarker的时候,我的习惯可能是以下两种情况:
- *.ftl文件是独立的被访问对象;
- *.ftl被其它文件所包含并非独立的被访问对象。
无论是哪种情况,我们的配置如下:
<!-- freemarker configuration -->
<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:freemarker.properties" />
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath">
<value>/WEB-INF/ftl</value>
</property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="viewNames" value="*.ftl" />
<property name="contentType" value="text/html; charset=utf-8" />
<property name="cache" value="true" />
<property name="prefix" value="/WEB-INF/ftl/" />
<property name="suffix" value="" />
<property name="order" value="2" />
</bean>
第21行:如果你配置了这个属性,那么你的controller里面要这么写(前提是你属于第一种情况):
@RequestMapping
public ModelAndView index() {
Employee e = employeeService.findById(14);
ModelAndView mv = new ModelAndView();
mv.addObject("employee", e);
mv.setViewName("employee.ftl");
return mv;
}
如果你属于第二种情况,这个无所谓。因为,它并不是导向到你的*.ftl文件,而是那个包含了*.ftl文件的文件。
如果你配置了InternalResourceViewResolver,而且你还在controller里面写了.ftl后缀,那么你可能会得到一个404错误。
原因就是映射出来的view可能是这样:
employee.ftl.jsp
切记!
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
P.S:
我配置了InternalResourceViewResolver而且我属于第二种情况,所以我的controller是这样的:
@RequestMapping
public ModelAndView index() {
Employee e = employeeService.findById(14);
ModelAndView mv = new ModelAndView();
mv.addObject("employee", e);
mv.setViewName("employee");
return mv;
}
我的JSP页面是这样:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Employee</title>
<link type="text/css" rel="stylesheet" href="../css/main.css">
<script type="text/javascript" src="../js/jquery-1.10.2.js"></script>
<script>
$(document).ready(function(){
console.log('jquery message is here.');
});
</script>
</head>
<body>
<div class="float-tool-bar">float tool bar</div>
<form>
<label>First Name: <input type="text" id="first_name" name="first_name"></label>
<label>Last Name: <input type="text" id="last_name" name="last_name"></label>
<label>Email: <input type="text" id="email" name="email"></label>
</form>
<%@ include file="../ftl/employee.ftl" %>
</body>
</html>
常用的freemarker.properties:
tag_syntax=auto_detect
template_update_delay=2
default_encoding=UTF-8
output_encoding=UTF-8
date_format=yyyy-MM-dd
time_format=HH:MM:SS
datetime_format=yyyy-MM-dd HH:mm:ss