Problem mit Velocity - ResourceNotFoundException beim Einsatz mit Spring MVC
Bin ich mit Spring MVC für meine web-Anwendung, und ich bin die Integration von Velocity templating meine E-Mails.
Ich erhalte die folgende 500-Fehlermeldung, wenn Er versucht zu senden meine E-Mail.
org.apache.velocity.exception.ResourceNotFoundException:
Unable to find resource '/WEB-INF/velocity/registrationEmail.vm'
Ich bin mir bewusst, was das bedeutet und was ich tun muss, aber ich weiß, dass ich muss etwas falsch machen und ich kann nicht herausfinden, warum es cant find my .vm - Dateien.
Habe ich konfiguriert Geschwindigkeit in meinen applicationContext.xml Datei als unten, aber ich glaube, ich könnte Sie verlassen erforderlichen Eigenschaften aus, die Geschwindigkeit muss um die Datei zu suchen.
<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>
Ich glaube, das könnte dort sein, wo ich ein paar änderungen/Ergänzungen, aber ich bin mir nicht sicher.
Den Pfad zu meinem template-Dateien ist WEB-INF/velocity/templateName.vm
Ich diese angeben, wenn mit der velocityEngine bean in mein controller, als auch, wie die folgenden
String text = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, "/WEB-INF/velocity/registrationEmail.vm", test);
gibt es etwas, was ich tun muss, meine build.xml Datei, um sicherzustellen, dass es ist in der Lage zu finden, meine template-Dateien?
InformationsquelleAutor TheJediCowboy | 2010-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem ist, dass WEB-INF-Datei ist nicht Teil des CLASSPATH. Sie können nicht erwarten, dass die
ClasspathResourceLoader
etwas zu finden, das nicht im CLASSPATH.WEB-INF/classes und alle JARs in WEB-INF/lib in den CLASSPATH. Versuchen Sie, Ihre Ordner mit dem .vm-Dateien unter WEB-INF/classes und sehen, ob das hilft.
Beste Idee von allen ist, zu Folgen Frühjahr docs:
http://static.springsource.org/spring/docs/2.5.x/reference/view.html#view-velocity
Welchen Weg hast du es geben? Sollte "velocity/*.vm". Wenn es in WEB-INF/classes müssen Sie nicht das Präfix.
Super, das hat funktioniert, ich bin neugierig, ist das eine gut Methode, dies zu tun(wobei die velocity-templates in das classes-Verzeichnis)? Ich habe nicht gesehen, viel über das Thema, aber ich habe gehört, aus mehreren Quellen der gleichen Praxis.
Sicher, warum sollte es nicht alle Recht? Du bist einfach setzen Sie Vorlagen in den classpath, wo sich die Ressource loader finden kann. Was sind die möglichen Probleme, die Sie befürchten?
Ich bin nicht besorgt über alle Probleme, die ich einfach nicht viel Erfahrung haben und nicht jeder etwas in das classes-Verzeichnis, aber es funktioniert gut und ich Schätze die Hilfe!
InformationsquelleAutor duffymo
Ich habe ein ähnliches problem erlebt und es die Ursache war die Verwendung von absoluten Pfad. Also versuchen Sie es ohne die führenden
'/'
:InformationsquelleAutor Péter Török
Sagen Sie archivieren *.vm-Dateien in eine *.jar-Datei. Und legen Sie es in Ihrem WEB-INF/lib.
Dann gehören folgende snippet in Ihrem bean-Konfiguration sichtbar machen VelocityEngineUtils.
Arbeiten wie ein Charme..!
<bean class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="resourceLoaderPath">
<value>classpath:com/test/mail</value>
</property>
</bean>
Können Sie geben, was jeder Ressource location(ich.e, sollten in Ihrem class-path) zwischen
<value>...</value>
block.InformationsquelleAutor mahesh
Dies ist schmerzhaft. Wenn du in den classpath dann die Entwicklung wird die Hölle, da der servlet-container würde ein reload der webapp jedes mal, wenn Sie änderungen in der velocity-templates.
Ich würde empfehlen, mit der org.apache.Geschwindigkeit.tools.Blick.WebappResourceLoader, das macht die Entwicklung viel einfacher, indem es nicht mehr notwendig die Dateien in den classpath und kann auch Sie relativ.
Können Sie auch überprüfen, mein post dazu: Spring-mvc + Geschwindigkeit + DCEVM
InformationsquelleAutor Rafael Sanches