2015-11-04 35 views
-1

我正在寻求解析驻留在不同文件夹中的Thymelaf模板。例如,我想将电子邮件模板放置在名为WEB-INF/thymeleaf/email的文件夹和上一级的网页模板中。对Thymeleaf 3模板解析器使用多个文件夹时FileNotFoundException

这适用于电子邮件模板,但请求下WEB-INF/thymeleaf结果的任何模板在FileNotFoundException

java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/thymeleaf/email/WebFile.html] at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141) at org.thymeleaf.spring4.templateresource.SpringResourceTemplateResource.reader(SpringResourceTemplateResource.java:103)

这里是我的尝试:

<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> 
    <property name="order" value="1" /> 
    <property name="characterEncoding" value="UTF-8" /> 
    <property name="templateEngine" ref="templateEngine" /> 
    </bean> 

    <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine"> 
    <property name="templateResolvers"> 
     <set> 
    <ref bean="emailTemplateResolver" /> 
    <ref bean="webTemplateResolver" /> 
     </set> 
    </property> 
    <property name="additionalDialects"> 
     <set> 
     <bean class="org.thymeleaf.extras.springsecurity3.dialect.SpringSecurityDialect"/> 
     </set> 
    </property> 
    </bean> 

    <bean id="emailTemplateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> 
    <property name="prefix" value="/WEB-INF/thymeleaf/email/" /> 
    <property name="suffix" value=".html" /> 
    <property name="templateMode" value="HTML" /> 
    <property name="characterEncoding" value="UTF-8" /> 
    <property name="cacheable" value="false"/> 
    <property name="order" value="2" /> 
    </bean> 

    <bean id="webTemplateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> 
    <property name="prefix" value="/WEB-INF/thymeleaf/" /> 
    <property name="suffix" value=".html" /> 
    <property name="templateMode" value="HTML" /> 
    <property name="characterEncoding" value="UTF-8" /> 
    <property name="cacheable" value="false" /> 
    <property name="order" value="3" /> 
    </bean> 

注意:我使用新的Thymeleaf 3.0.0.BETA01来利用更宽松的解析功能。我的堆栈跟踪反映了新的库,所以我知道它正确部署。我正在使用基于migration guideSpringResourceTemplateResolver

即使一个解决方法,将不胜感激(除了将所有的文件放在一个文件夹)。

+0

你得到这个答案?我现在正在遇到一模一样的问题。我甚至试图把文件放在同一个文件夹中。仍然得到FileNotFoundException。 – Sonal

+0

有人可以解释downvote? – bphilipnyc

回答

0

我能够不明确说明的电子邮件文件夹得到这个工作:

<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver"> 
    <property name="order" value="1"/> 
    <property name="characterEncoding" value="UTF-8"/> 
    <property name="templateEngine" ref="templateEngine"/> 
</bean> 

<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine"> 
    <property name="templateResolvers"> 
     <set> 
      <ref bean="webTemplateResolver"/> 
     </set> 
    </property> 
    <property name="additionalDialects"> 
     <set> 
      <bean class="org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/> 
     </set> 
    </property> 
</bean> 

<bean id="webTemplateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver"> 
    <property name="prefix" value="/WEB-INF/thymeleaf/"/> 
    <property name="suffix" value=".html"/> 
    <property name="templateMode" value="HTML"/> 
    <property name="characterEncoding" value="UTF-8"/> 
    <property name="cacheable" value="false"/> 
    <property name="order" value="3"/> 
</bean> 

(我也因为升级Spring Security的4个版本,但我不相信这是有关)

我的结构是这样的:

WEB-INF 
    --->thymeleaf 
     page.html 
      --->email 
       emailTemplate.html 
+0

谢谢!我的问题是在我的代码中不正确地使用“.html”。通过删除额外的“.html”并使用templateResolver中的getSuffix来实现它 – Sonal