如何在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
相关产品推荐
相关产品推荐

