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 文件的顶部