English 中文(简体)
Freemarker template not found
原标题:

I m currently trying to get Freemarker to work with my application using Spring. No matter what I try I keep getting template not found. I am not sure if I have the configuration set up properly, but it never finds my template. Here is my spring bean config:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>

Whenever I try to call getTemplate on the freemaker configuration it always sends back a template not found error. So if I do

configuration.getTemplate("testTemplate.ftl") 

it always throws an IOException.

I m not sure if anyone has an idea of what I m doing wrong.

Thanks for all your help!

最佳回答

First of all, /WEB-INF/freemarker would only work as a path from within WebApplicationContext; otherwise Spring would attempt to resolve it as file system path rather than servlet context path. Is the excerpt you ve posted above from the context being loaded by DispatcherServlet?

Secondly, is there any reason why are you using configuration directly instead of using Spring s ViewResolver?

Finally, IOException can mean many different things. Can you post a full stack trace?

问题回答

I ve just had the same kind of problem and, at the end, I decide to use the approach below:

Configuration configuration = new Configuration();
FileTemplateLoader templateLoader = new FileTemplateLoader(new File(YOUR_BASE_TEMPLATE_DIR));
configuration.setTemplateLoader(templateLoader);
freemarker.template.Template template = configuration.getTemplate(YOUR_TEMPLATE_NAME);
template.process(datamodel, writer);

you can also set it like

    @Bean
    public FreeMarkerConfigurationFactoryBean freemarkerConfiguration() {
        FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
        bean.setTemplateLoaderPath("classpath:/templates/");
        return bean;
    }

In your case:

    <property name="templateLoaderPath" value="classpath:/WEB-INF/freemarker/"/>

This worked for me:

configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(), "/templates");

I think you must make sure that the file "testTemplate.ftl" is in the folder "/WEB-INF/freemarker/"





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签