Freemarker模板位置和Spring Batch Admin

时间:2016-04-18 16:46:56

标签: freemarker spring-batch-admin

我使用Spring Batch Admin作为Spring Batch项目的Web前端以及Spring Boot。

Batch Admin使用Freemarker提供一些模板来设置布局。我添加了一些存储在src/main/webapp/web/layouts/html中的模板,并且包装过程中的资源包含在.jar文件中。

当我启动应用程序时,找不到我自己的布局(“layouts / html / myOwn.ftl not found”是错误消息)。

我可以通过添加像这样的FreeMarkerConfigurer来解决这个问题:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath"><value>classpath:/WEB-INF/</value></property>
 </bean>

然而,当我这样做时,会找到我自己的模板,但标准模板已经消失(如layouts/html/home.ftl)。

有没有办法提供两个路径或两个模板加载器,以便Spring Batch Admin的默认模板加载器不被覆盖但用作后备?

还是有其他解决方案,比如在特定的地方拥有资源吗?

1 个答案:

答案 0 :(得分:0)

感谢@ddekany,我提出了以下解决方案。

Freemarker的必要配置:

<bean id="freemarkerConfig" class="org.springframework.batch.admin.web.freemarker.HippyFreeMarkerConfigurer">
    <property
        name="templateLoaderPaths"
        value="classpath:/WEB-INF/web,classpath:/org/springframework/batch/admin/web"
    />

    <property name="preferFileSystemAccess" value="false" />
    <property name="freemarkerVariables">
        <map>
            <entry key="menuManager" value-ref="menuManager" />
        </map>
    </property>
    <property name="freemarkerSettings">
        <props>
            <prop key="default_encoding">UTF-8</prop>
            <prop key="output_encoding">UTF-8</prop>
        </props>
    </property>
</bean>

第一个属性templateLoaderPaths(观察附加的s)允许指定用逗号分隔的多个路径。这两个路径是我自己的路径classpath:/WEB-INF/web以及默认Spring Boot管理文件classpath:/org/springframework/batch/admin/web的路径。

menuManager的其他配置是必要的,否则导航中的菜单条目会消失。

自定义freemarker布局文件存储在默认位置src/main/webapp/WEB-INF/web/layouts/html/中,并且模板加载器可见,必须通过

包含在jar构建中
    <resources>
        <!-- copy the Freemarker templates -->
        <resource>
            <targetPath>WEB-INF</targetPath>
            <filtering>false</filtering>
            <directory>${basedir}/src/main/webapp/WEB-INF</directory>
        </resource>
    </resources>

项目的pom.xml