我尝试将Spring 4(4.3.0。),tiles 3(3.0.7)和FreeMarker 2(2.3.25-incubating)集成到模板定义文件中:
<definition name="base-definition" template="/WEB-INF/views/tiles/layouts/layout.ftl" templateType="freemarker">
<put-attribute name="title" value="" />
<put-attribute name="body" value="" />
</definition>
<!-- Home Page -->
<definition name="home" extends="base-definition">
<put-attribute name="title" value="Welcome" />
<put-attribute name="body" value="/WEB-INF/views/jsp/home.jsp" />
</definition>
针对home.jsp:
<%@ page errorPage="error.jsp" contentType="text/html; charset=utf-8"%>
....
layouts.ftl:
<!DOCTYPE html>
<html lang="sk">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
....
<title><@tiles.insertAttribute name="title" /></title>
</head>
<body>
<section id="site-content">
<@tiles.insertAttribute name="body" />
</section>
ľščťžýáíéúä
</body>
</html>
我有CustomTilesContainerFactory(使用registerAttributeRenderers函数扩展BasicTilesContainerFactory):
@Override
protected void registerAttributeRenderers(final BasicRendererFactory rendererFactory,
final ApplicationContext applicationContext, final TilesContainer container,
final AttributeEvaluatorFactory attributeEvaluatorFactory) {
super.registerAttributeRenderers(rendererFactory, applicationContext, container, attributeEvaluatorFactory);
FreemarkerRenderer freemarkerRenderer = FreemarkerRendererBuilder.createInstance()
.setApplicationContext(applicationContext).setParameter("TemplatePath", "/")
.setParameter("NoCache", "true").setParameter("ContentType", "text/html")
.setParameter("template_update_delay", "0").setParameter("default_encoding", "UTF-8")
.setParameter("number_format", "0.##########")
.setParameter(SharedVariableLoaderFreemarkerServlet.CUSTOM_SHARED_VARIABLE_FACTORIES_INIT_PARAM,
"tiles," + TilesSharedVariableFactory.class.getName())
.build();
rendererFactory.registerRenderer(FREEMARKER_RENDERER_NAME, freemarkerRenderer);
}
我有使用createContainerFactory函数的CustomTilesInitializer(扩展DefaultTilesInitializer):
@Override
protected AbstractTilesContainerFactory createContainerFactory(ApplicationContext context) {
return new CustomTilesContainerFactory();
}
但在网络浏览器中,HTTP响应标题是可以的:
text/html; charset=utf-8
但是当我检查网页的属性(鼠标右键单击)时,请编码“windows-1252”,请问,哪里有问题,为什么没有utf-8?当然,特殊字符存在问题,在layouts.ftl中有“ľščťžýáíéúä”但在web-bowser中是?????ýáíéúä。
谢谢!
答案 0 :(得分:0)
溶液:
@RequestMapping(value = { "/index" }, method = RequestMethod.GET)
public String homePage(ModelMap model, HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
return "home";
}
但是,它不是很好的解决方案:-(在ALL请求映射函数中设置内容类型是否必要?: - (