如何配置 Maven Freemarker 以识别 `@include_page` 标签?

Posted

技术标签:

【中文标题】如何配置 Maven Freemarker 以识别 `@include_page` 标签?【英文标题】:How to configure Maven Freemarker to recognize `@include_page` tag? 【发布时间】:2021-09-18 07:35:58 【问题描述】:

我正在尝试使用来自 FreemarkerServlet 的 @include_page 宏 - 使用带有 Freemarker 版本 2.3.31 的 Maven Freemarker 框架,我可以看到有关此标签的注释现在可以在它的源代码中找到,但它仍然不是在实际模板输出中解析/识别。

对于上下文:

一切都已完全配置并使用纯 ftl 按预期工作 我们依赖于对部分输出使用仅 JSP 模板(而主代码库仅使用 .ftl 模板) @include_page 允许将 jsp 页面包含到 ftl 中 我如何尝试: 在WEB-INF/views目录下,假设有一个home.ftl 用<h2>Hello!</h1>添加hello.jsp 在 home.ftl 中
<#assign....>
.
.
.
<div>
 <@include_page path="hello.jsp"/>
</div>
.
.
.

这会导致错误,即在 null 上找不到 include_page 行上的语句,然后是关于使用默认值或 ifs 的说明

有谁知道使用它是否需要一些额外的配置?

【问题讨论】:

【参考方案1】:

问题是我们需要添加

model.put( FreemarkerServlet.KEY_INCLUDE, new IncludePage( request,
        response ) );

到 FreemarkerView 模型。

This is the post确实解决了问题。

【讨论】:

【参考方案2】:

要使用 JSP 支持(include_page 是其中的一部分),您必须调用模板并转发到映射到 FreemarkerServlet 的 URL,而不是直接使用其 Java API 调用 FreeMarker。这就是 JSP 的工作方式(或者最初是这样工作的)。详情请见https://freemarker.apache.org/docs/pgui_misc_servlet.html

【讨论】:

不,这不是问题所在。如果您查看 OP 中链接的文档,您会发现您应该直接调用 api。 整个链接页面大约是FreemarkerServlet,并且默认情况下会暴露该指令。但似乎这个指令也可以独立工作。 (实际上,既然它在其构造函数中得到了所有需要的东西,也就不足为奇了。)

以上是关于如何配置 Maven Freemarker 以识别 `@include_page` 标签?的主要内容,如果未能解决你的问题,请参考以下文章

Freemarker 配置问题(Maven 编译失败)

使用 maven、spring、freemarker 等帮助设置 YUI Compressor 以适应不同的环境(测试/开发/生产)

如何在 Maven 中使用模板代码生成器(例如 freemarker)?

Freemarker 模板引擎和 Maven

如何在 FreeMarker 和 maven 或 ant(不是 servlet)中使用 auto_import 功能

Freemarker01