找不到资源 - 无法找到具有 Velocity 的资源

resource not found - unable to find resource with velocity

提问人:dynamo 提问时间:8/9/2023 更新时间:8/10/2023 访问量:39

问:

不确定为什么我会收到此错误 - 我看不到我的配置出了什么问题。

对要使用的文件的引用位于 notification.properties 文件中,该文件在我的配置中引用:

类路径:com/app/application/notification/notifications

我的应用程序运行良好,并在Notificaitons.properties文件中查找New.User.Password.Template=en/NewUserPassword.html

我已经调试了它,它发现“en/newuserpassword.html”很好,但它找不到实际文件本身。

我已经检查过,文件肯定在那里 - 完全匹配,但就是找不到它:

resources/com/app/application/notification/template/en/newuserpassword.html

org.apache.velocity.exception.ResourceNotFoundException:找不到资源“en/newuserpassword.html” 在 org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474) 在 org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352) 在 org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533) 在 org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:343) 在 org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:320)

 <bean id="notificationResolver" class="com..application.notification.resolver.VelocityNotificationResolver">
        <constructor-arg>
            <bean class="com.amor.hcplus.application.util.spring.context.TypeConvertingReloadableResourceBundleMessageSource">
                <property name="cacheSeconds" value="60" />
                <property name="basenames">
                    <list>
                        <value>classpath:com/app/application/notification/notifications</value>
                        <value>WEB-INF/spring/i18n/enums</value>
                    </list>
                </property>
            </bean>
        </constructor-arg>
        <constructor-arg>
            <bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine">
                <constructor-arg ref="velocityProperties"/>
            </bean>
        </constructor-arg>
    </bean>

我有一个类似的设置来审核消息,它工作正常,并且找到了模板

    <bean id="auditMessageResolver" class="com.amor.hcplus.application.audit.domain.VelocityAuditMessageResolver">
        <constructor-arg>
            <bean class="com.application.util.spring.context.TypeConvertingReloadableResourceBundleMessageSource">
                <property name="basenames">
                    <list>
                        <value>WEB-INF/spring/i18n/enums</value>
                        <value>classpath:com/app/application/audit/auditing</value>
                    </list>
                </property>
            </bean>
        </constructor-arg>
        <constructor-arg>
            <bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine">
                <constructor-arg ref="velocityProperties"/>
            </bean>
        </constructor-arg>
    </bean>
Java Spring-MVC 速度

评论


答:

0赞 lance-java 8/9/2023 #1

如果您的模板位于类路径上,则为com/app/application/notification/template/en/newuserpassword.html

你要求速度找到en/newuserpassword.html

那么你的模板位置应该是com/app/application/notification/template

而不是com/app/application/notification/notifications

评论

0赞 dynamo 8/9/2023
因此,Notification.Properties 文件就是我在这里引用的 - com/app/application/notification/notifications 模板文件存储在您所说的位置,只是您只是缺少 /en com/app/application/notification/en/template
0赞 dynamo 8/10/2023 #2

这对我来说是一个愚蠢的错误,但希望它能向将来阅读本文的任何人强调问题。

我的 Notificaitons 配置引用了指向审计模板的速度属性。这太明显了,我什至没有注意到它。

<util:properties id="velocityPropertiesNotifications">
    <prop key="resource.loader">file</prop>
    <prop key="file.resource.loader.class">org.apache.velocity.runtime.resource.loader.FileResourceLoader</prop>
    <prop key="file.resource.loader.cache">true</prop>
    <prop key="file.resource.loader.path">C:/Program Files/Apache Software Foundation/Tomcat 9.0_Tomcat9.0.76/webapps/my-app/WEB-INF/classes/com/application/notification/templates</prop>
</util:properties> 

我刚刚添加了一个新属性,该属性指向存储模板的正确目录 - 这解决了未找到错误。