【问题标题】:Spring MVC & FreeMarker & Custom TagLibSpring MVC & FreeMarker & 自定义 TagLib
【发布时间】:2013-10-10 16:16:43
【问题描述】:

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

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

controller
    -> FTL
        -> TagLib

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

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

我该如何解决这个问题?

提前致谢

【问题讨论】:

    标签: java spring spring-mvc freemarker taglib


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 2013-07-21
      • 1970-01-01
      • 2015-03-29
      • 2013-10-21
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多