2011-04-03 3 views
5

J'ai une application Web Spring/JSF qui dépend d'un module et qui utilise des modèles Freemarker. Voici ce que j'ai fait pour l'intégration:Configuration Spring Freemarker, modèle introuvable

J'ai importé l'applicationContext-freemarker-module.xml à applicationContext.xml J'ai ajouté le bean de configuration à applicationContext-freemarker-module.xml comme ci-dessous. J'ai mis mes modèles dans le répertoire src/main/resources du module freemarker. Je lis les modèles comme ci-dessous:

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

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

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

Maintenant, je l'ai essayé tant de valeurs de la propriété templateLoaderPath mais j'ai toujours eu le « modèle non trouvé. » exception.

JAR du module de Freemarker est comme ci-dessous

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

Où dois-je mettre les fichiers de modèle et que dois-je mettre la valeur templateLoaderPath? Je n'arrive pas à comprendre pourquoi "template.ftl" est introuvable. J'essaie de définir la bonne valeur pour plusieurs heures. J'ai essayé différentes configurations de chemin sans succès.

Merci beaucoup pour votre aide,

+0

Avez-vous essayé ''? Si le fichier .ftl est à la racine du fichier, cela devrait fonctionner ... – javanna

+0

oui J'ai essayé et je n'arrive toujours pas à trouver le fichier .ftl. merci beaucoup de répondre. – jiraiya

Répondre

11

Assurez-vous que les conditions suivantes

  1. Dans votre * servlet -action xml configuration FreeMarkerConfigurationFactoryBean a la "preferFileSystemAccess" propriété définie sur "false"

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

    en freemarker le chargeur de modèle tente de faire correspondre un strin g "classpath:", pas "classpath *:"

  3. vous avez le fichier JAR sous le dossier WEB-INF/lib.

  4. Enfin, votre fichier modèle sous la racine du fichier jar.

+2

+1 pour preferFileSystemAccess = false –

+0

Yeaaaaah! C'était totalement la bonne réponse ;-) –

+0

Cas légèrement différent pour moi: j'avais "classpath: templates" et ça ne fonctionnait pas sur Jetty, en le changeant en "classpath: templates /" et ça marche bien! – dannrob

3

utiliser quelques haricots comme ceci:

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

Hope this vous aide.

Questions connexes