NoSuchRendererException:找不到名为 'freemarker' 的渲染器
NoSuchRendererException: Cannot find a renderer named 'freemarker'
我正在尝试制作一个同时使用 Tiles、Spring 和 FreeMarker 的应用程序。我的项目只使用 Tiles 和 Spring,但是当我尝试在我的 Tiles 模板中使用 ftl 文件时,出现错误
org.apache.tiles.request.render.NoSuchRendererException: Cannot find a renderer named 'freemarker'
at org.apache.tiles.request.render.BasicRendererFactory.getRenderer(BasicRendererFactory.java:57)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:252)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:397)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221)
at org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59)
at org.springframework.web.servlet.view.tiles3.TilesView.renderMergedOutputModel(TilesView.java:132)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)
这是我的磁贴模板的样子
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- Default Main Template -->
<definition name=".mainTemplate" template="/templates_ftl/main.ftl" templateType="freemarker">
<put-attribute name="title" value="Permissions Editor" type="string" />
<put-attribute name="footer" value="/templates_ftl/footer.ftl" type="freemarker" />
<put-attribute name="body" value="/templates_ftl/blank.ftl" type="freemarker" />
</definition>
<definition name="login" extends=".mainTemplate">
</definition>
</tiles-definitions>
这只是我正在努力让 FreeMarker 工作的一个小例子,这样我就可以在我的项目的其余部分中使用它。这是控制器。
@RequestMapping(value = "/")
public String login(@ModelAttribute("LoginInfo") LoginInfo info, HttpServletRequest request) {
logger.info("First visit to login page");
if (HttpUtility.getInstance().compareSession(request)) {
logger.info("Leaving initial login page with user already logged in, sending to show_roles page");
return "show_roles";
}
logger.info("Leaving initial login page sending to login submit");
return "login";
}
我通过添加
解决了它
<#assign tiles=JspTaglibs["http://tiles.apache.org/tags-tiles"]>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
到我的 ftl 文件的顶部
我正在尝试制作一个同时使用 Tiles、Spring 和 FreeMarker 的应用程序。我的项目只使用 Tiles 和 Spring,但是当我尝试在我的 Tiles 模板中使用 ftl 文件时,出现错误
org.apache.tiles.request.render.NoSuchRendererException: Cannot find a renderer named 'freemarker'
at org.apache.tiles.request.render.BasicRendererFactory.getRenderer(BasicRendererFactory.java:57)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:252)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:397)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:238)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:221)
at org.apache.tiles.renderer.DefinitionRenderer.render(DefinitionRenderer.java:59)
at org.springframework.web.servlet.view.tiles3.TilesView.renderMergedOutputModel(TilesView.java:132)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:745)
这是我的磁贴模板的样子
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- Default Main Template -->
<definition name=".mainTemplate" template="/templates_ftl/main.ftl" templateType="freemarker">
<put-attribute name="title" value="Permissions Editor" type="string" />
<put-attribute name="footer" value="/templates_ftl/footer.ftl" type="freemarker" />
<put-attribute name="body" value="/templates_ftl/blank.ftl" type="freemarker" />
</definition>
<definition name="login" extends=".mainTemplate">
</definition>
</tiles-definitions>
这只是我正在努力让 FreeMarker 工作的一个小例子,这样我就可以在我的项目的其余部分中使用它。这是控制器。
@RequestMapping(value = "/")
public String login(@ModelAttribute("LoginInfo") LoginInfo info, HttpServletRequest request) {
logger.info("First visit to login page");
if (HttpUtility.getInstance().compareSession(request)) {
logger.info("Leaving initial login page with user already logged in, sending to show_roles page");
return "show_roles";
}
logger.info("Leaving initial login page sending to login submit");
return "login";
}
我通过添加
解决了它<#assign tiles=JspTaglibs["http://tiles.apache.org/tags-tiles"]>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
到我的 ftl 文件的顶部