0

在带有 FreeMarker 环境的 Spring MVC 中,我有一个自定义 TagLib,它处理带有数据的 ftl 模板并将结果写入标签的 JSP 上下文中。

当我从已解析视图(即从控制器呈现的模板)调用此标记时,行为是完全正确的。

controller
    -> FTL
        -> TagLib

但是当我从模板中调用它以由同一标签的另一个实例处理时,我收到了一个错误(标签未定义),当我在我的 FTL 中添加#assign 语句时,我也收到了一个错误(JspTagLibs一片空白)。

controller
    -> FTL
        -> TagLib
            -> FTL
                -> TagLib (crash!)

我怎么能解决这个问题?

提前致谢

4

1 回答 1

0

要从 FTL 调用 JSP 标记,您需要一个特殊的模板上下文(数据模型,在 FTL 术语中)来实现它。我假设 Spring 为初始调用提供了这样的上下文。但是,如果您在第二种情况下从一个新的模板上下文(freemarker.core.Environment实际上是一个新的)开始,那么您将得不到支持。如果你真的不需要一个新的模板上下文,你可以Environment用 static 得到更高的值Environment.getCurrentEnvironment(),然后Environment. include用来调用第二个 FTL。但是,您将在那里使用与最顶层 FTL 中相同的一组模板创建的变量。(如果第二个 FTL 只定义一个宏并调用它,这可以有所改善,因为宏至少可以有局部变量。)所以,你可以尝试重用dataModel来自更高层的Environment(使用Environment.getDataModel()) 当您调用第二个 FTL 时。我想它应该可以工作......从未尝试过。

于 2013-10-11T07:31:09.617 回答