You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Smooks配置文件中用Freemarker的#include嵌入多模板?

嘿,我来给你一步步拆解怎么在Smooks配置里用Freemarker的#include指令嵌入多个模板文件~

第一步:先在Smooks配置里注册所有模板资源

首先得让Smooks能找到你要用的所有Freemarker模板——不管是主模板还是要嵌入的子模板。你可以在Smooks的XML配置文件里,用<resource-config>标签逐个配置这些模板的路径和类型。

举个实际配置的例子:

<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd">
    <!-- 注册主模板 -->
    <resource-config selector="#main-page-template">
        <resource>templates/main.ftl</resource>
        <param name="templateType">freemarker</param>
    </resource-config>

    <!-- 注册要嵌入的头部子模板 -->
    <resource-config selector="#page-header">
        <resource>templates/header.ftl</resource>
        <param name="templateType">freemarker</param>
    </resource-config>

    <!-- 注册要嵌入的底部子模板 -->
    <resource-config selector="#page-footer">
        <resource>templates/footer.ftl</resource>
        <param name="templateType">freemarker</param>
    </resource-config>
</smooks-resource-list>

这里的selector可以随便起,只要能标识对应的模板就行;resource里的路径要和你项目中模板文件的实际位置匹配哦。

第二步:在主模板里用#include嵌入子模板

搞定Smooks配置后,直接在你的主Freemarker模板里用#include指令引入子模板就行。语法很直观,只要写上子模板的路径(可以是相对于主模板的路径,也可以是Smooks配置里的绝对资源路径)。

比如主模板main.ftl的内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>我的页面</title>
    <!-- 嵌入头部模板 -->
    <#include "templates/header.ftl">
</head>
<body>
    <div class="content">
        <h1>这是主内容区</h1>
        <p>这里放页面的核心内容...</p>
    </div>

    <!-- 嵌入底部模板 -->
    <#include "templates/footer.ftl">
</body>
</html>

如果子模板和主模板在同一个文件夹下,直接写文件名就好,比如<#include "header.ftl">,更省事。

第三步:几个要注意的小细节
  • 路径别写错:#include里的路径必须和Smooks配置中注册的路径一致,不然Smooks找不到模板会直接报错。
  • 变量能共享:子模板可以直接用主模板里的所有变量,因为它们在同一个Freemarker上下文里运行。如果子模板需要特定变量,记得在Smooks执行时把变量传入上下文。
  • 别搞循环引用:千万别让子模板又#include主模板,不然会触发无限循环,直接搞崩Smooks的执行进程。
  • 编码要统一:所有模板文件的编码最好统一成UTF-8,避免出现乱码问题。

内容的提问来源于stack exchange,提问作者keanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:17:22