2011-04-03 11 views
5

Tengo una aplicación web Spring/JSF que tiene una dependencia de un módulo que usa plantillas de Freemarker. Esto es lo que hice para la integración:Configuración de Spring Freemarker, plantilla no encontrada

me importó el applicationContext-FreeMarker-Module.xml a applicationContext.xml añadí el grano de configuración para applicationContext-FreeMarker-Module.xml como a continuación.

<bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"> 
    <property name="templateLoaderPath" value="classpath*:/"/> 
</bean> 

Pongo mis plantillas en el directorio src/main/resources del módulo freemarker. estoy leyendo las plantillas, como a continuación:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-freemarker-module.xml"); 

Configuration templateConfig = (Configuration) context.getBean("freemarkerConfiguration"); 

Template template = templateConfig.getTemplate("template.ftl"); 

Ahora Traté tantos valores de la propiedad templateLoaderPath pero siempre me dieron la "plantilla no se encuentra." excepción.

JAR

del módulo Freemarker es como a continuación

template.ftl 
applicationContext-freemarker-module.xml 
com/.../ (classes) 
META-INF 

Dónde coloco los archivos de plantilla y qué debo establecer para el valor templateLoaderPath? No pude entender por qué no se puede encontrar "template.ftl". Estoy tratando de establecer el valor correcto por muchas horas. Intenté varias configuraciones de ruta sin éxito.

Gracias mucho por su ayuda,

+0

¿Has probado ''? Si el archivo .ftl está en la raíz del contenedor, debería funcionar ... – javanna

+0

sí, lo he intentado y todavía no puedo encontrar el archivo .ftl. Muchas gracias por la respuesta. – jiraiya

Respuesta

11

Asegúrese de tener los siguientes

  1. En su configuración * -acción FreeMarkerConfigurationFactoryBean servlet XML ha establecido la propiedad "preferFileSystemAccess" a "falso"

  2. <property name="templateLoaderPath" value="classpath*:/"/> should be <property name="templateLoaderPath" value="classpath:/"/>

    En FreeMarker el cargador de plantillas intenta hacer coincidir un strin g "classpath:", no "classpath *:"

  3. tiene el archivo JAR en la carpeta WEB-INF/lib.

  4. Finalmente, su archivo de plantilla en la raíz del archivo jar.

+2

+1 por preferFileSystemAccess = falso –

+0

¡Sí! Esta fue totalmente la respuesta correcta ;-) –

+0

Caso ligeramente diferente para mí: tenía "classpath: templates" y no estaba funcionando en Jetty, cambiándolo a "classpath: templates /" y funciona bien! – dannrob

3

utilizar un poco de grano de la siguiente manera:

<bean 
    class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean"> 
    <property name="templateLoaderPath" value="classpath:META-INF/freemarker/" /> 
    <property name="preferFileSystemAccess" value="false" /> 
</bean> 

Esperanza ayuda esto.

Cuestiones relacionadas