Problème avec la Vélocité ResourceNotFoundException lors de l'utilisation avec Spring MVC
Je suis à l'aide de Spring MVC pour mon application web et je suis l'intégration de Vitesse pour gabarits mes e-mails.
Je suis l'obtention des 500 erreur lorsqu'Il tente d'envoyer mon e-mail.
org.apache.velocity.exception.ResourceNotFoundException:
Unable to find resource '/WEB-INF/velocity/registrationEmail.vm'
Je suis conscient de ce que cela signifie et ce que je dois faire, mais je sais que je dois être en train de faire quelque chose de mal et je ne peux pas comprendre pourquoi il ne trouve pas mon .vm fichiers.
J'ai configuré la vitesse dans mon applicationContext.xml fichier comme ci-dessous, mais je crois que je pourrais partir propriétés nécessaires que la Vitesse doit trouver le fichier.
<bean id="velocityEngine"
class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>
</bean>
Je crois que ce pourrait être là où j'ai besoin de faire quelques changements/ajouts, mais je ne suis pas sûr.
Le chemin d'accès à mes fichiers de modèle est WEB-INF/vitesse/templateName.vm
Je précise cela lors de l'utilisation de la velocityEngine bean dans mon contrôleur, telles que les suivantes
String texte = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, "/WEB-INF/vitesse/registrationEmail.vm", test);
il ya quelque chose que je dois faire dans mon build.xml fichier pour s'assurer qu'il est capable de trouver mes fichiers de modèle?
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est que WEB-INF n'est pas une partie de CLASSPATH. Vous ne pouvez pas attendre de la
ClasspathResourceLoader
de trouver quelque chose qui n'est pas dans le CLASSPATH.WEB-INF/classes et tous les Pots dans WEB-INF/lib sont dans le CLASSPATH. Essayez de déplacer votre dossier avec la .des fichiers de machines virtuelles sous WEB-INF/classes et voir si cela aide.
Meilleure idée est de suivre le Printemps docs:
http://static.springsource.org/spring/docs/2.5.x/reference/view.html#view-velocity
J'ai connu un problème similaire et il y a la racine de la cause s'est avéré être l'utilisation d'un chemin d'accès absolu. Donc, essayez sans le
'/'
:Dire que vous l'archive *.des fichiers de machines virtuelles dans un *.fichier jar. Et la mettre dans votre WEB-INF/lib.
Puis d'inclure le code suivant dans votre fève de configuration pour le rendre visible à VelocityEngineUtils.
Travail comme un charme..!
<bean class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="resourceLoaderPath">
<value>classpath:com/test/mail</value>
</property>
</bean>
Vous pouvez donner ce que chaque votre emplacement de ressource(j'.e, devrait être dans votre chemin de classe) entre
<value>...</value>
bloc.C'est douloureux. Si vous mettez dans le classpath ensuite, le développement devient l'enfer, depuis le conteneur de servlet permettrait de recharger la webapp chaque fois que vous effectuez un changement dans la vitesse de modèles.
Je vous conseille d'utiliser le org.apache.la vélocité.outils.vue.WebappResourceLoader, ce qui rend le développement plus facile en n'exigeant pas que les fichiers soient dans le classpath et vous permet également de faire par rapport comprend.
Vous pouvez également consulter mon post à ce sujet: Spring-mvc + Vitesse + DCEVM