我有2个项目。一个项目(A)包含我的所有核心功能,例如我的实体/服务/ dao等。它还包含许多.ftl模板,我希望在其他项目(B)中加以利用并重用。我已经成功地获得了(B)来利用(A)中的类,但是我对重用freemarker模板没有任何运气。
项目(B)是一个Spring Boot应用程序(v2.1.3),所以我认为使用application.property:spring.freemarker.template-loader-path
是正确的,而不是定义一个新的@Bean
。 / p>
由于是春季启动应用程序,因此默认情况下且没有此属性,该项目将在项目自己的src/main/resources/templates
位置中查找,但我的目的是使项目(A)没有自己的模板,并且对于我的控制器返回在项目(B)中找到的模板。
在我的Maven依赖关系中,层次结构如下:
projectA-0.0.1.jar
templates
folder1
exampleA.ftl
folder2
exampleB.ftl
当前,我的控制器设置为返回诸如return new ModelAndView("folder1/exampleA")
之类的内容,其中上下文前缀为src / main / resources / templates /
有人知道我需要赋予spring.freemarker.template-loader-path
属性的值的正确格式,以便指向我的依赖项jar中的模板而不是本地src / main / resources / templates吗?
答案 0 :(得分:0)
所以spring.freemarker.template-loader-path=
classpath:/ templates / 是我最初的问题的答案,但是并不能解决我的问题。
将以下@Bean
添加到我的配置类中,记入@ddekany
@Bean
public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() {
FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
bean.setTemplateLoaderPath("classpath:/templates/");
return bean;
}
看来,尽管我可以使用属性,但由于其他因素,在我的方案中仍需要使用@Bean
。
答案 1 :(得分:0)
这对我不起作用。 但是这种方法确实有效:
@Bean
@Primary
public FreeMarkerConfigurationFactoryBean getFreeMarkerConfiguration() throws IOException {
FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
ClassTemplateLoader ctl = new ClassTemplateLoader(getClass(), "/templates");
bean.setPostTemplateLoaders(ctl);
return bean;
}
答案 2 :(得分:0)
我最终得到了以下豆子。如果您不使用spring-freemarker-starter maven依赖项。我使用的是simpleJavamail,因此不需要所有依赖项。
<div class="slideshow-container">
<!-- Full-width images with number and caption text -->
<div class="mySlides1">
<div class="numbertext">1 / 3</div>
<img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<div class="mySlides1">
<div class="numbertext">2 / 3</div>
<img src="https://images.unsplash.com/photo-1584269655525-c2ec535de1d0?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<div class="mySlides1">
<div class="numbertext">3 / 3</div>
<img src="https://images.unsplash.com/photo-1584459578334-c4ba449af8f9?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=634&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<div class="mySlides1">
<div class="numbertext">3 / 3</div>
<img src="https://images.unsplash.com/photo-1584381296550-99dfc0837d42?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<div class="mySlides1">
<div class="numbertext">3 / 3</div>
<img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100%; height: 850px; border-radius: 25px; position: relative; top: 280px;">
</div>
<!-- Next and previous buttons -->
<a class="prev" onclick="plusSlides(-1, 0)">❮</a>
<a class="next" onclick="plusSlides(1, 0)">❯</a>
</div>
<div class="slideshow-container">
<div class="mySlides2">
<img src="https://images.unsplash.com/photo-1584377160571-1ea5df91fc75?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=717&q=80" style="width:128px; height: 128px;">
</div>
<div class="mySlides2">
<img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:128px; height: 128px;">
</div>
<div class="mySlides2">
<img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:128px; height: 128px;">
</div>
<!-- Next and previous buttons -->
<a class="prev1" onclick="plusSlides(-1, 1)">❮</a>
<a class="next1" onclick="plusSlides(1, 1)">❯</a>
</div>
<div class="slideshow-container">
<!-- Full-width images with number and caption text -->
<div class="mySlides3">
<img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px;">
</div>
<div class="mySlides3">
<img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px">
</div>
<div class="mySlides3">
<img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px">
</div>
<div class="mySlides3">
<img src="https://images.unsplash.com/photo-1584397953202-2c15e86b09cb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px;">
</div>
<div class="mySlides3">
<img src="https://images.unsplash.com/photo-1584450402195-ff360cf81f30?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" style="width:100px; height: 850px; border-radius: 25px; position: relative; bottom: 845px; left:530px;">
</div>
<!-- Next and previous buttons -->
<a class="prev2" onclick="plusSlides(-1, 2)">❮</a>
<a class="next2" onclick="plusSlides(1, 2)">❯</a>
</div>
答案 3 :(得分:0)
设置为属性:
spring.freemarker.cache=false
spring.freemarker.template-loader-path=file:src/main/resources/templates/
为我工作。