[英]Spring MVC & FreeMarker & Custom TagLib
在带有FreeMarker的Spring MVC环境中,我有一个自定义TagLib,它可以处理带有数据的ftl模板,并将结果写入标签的JSP上下文中。
当我从已解析的视图(意味着从控制器渲染的模板)调用此标记时,此行为是完全正确的。
controller
-> FTL
-> TagLib
但是,当我从模板中调用它并由同一标签的另一个实例处理时,出现错误(未定义标签),并且在FTL中添加#assign语句时,我也收到了错误(JspTagLibs一片空白)。
controller
-> FTL
-> TagLib
-> FTL
-> TagLib (crash!)
我该如何解决?
提前致谢
要从FTL调用JSP标记,需要一个特殊的模板上下文(在FTL术语中为数据模型)来实现。 我假设Spring为初始调用提供了这样的上下文。 但是,如果在第二种情况下从新的模板上下文开始(实际上是带有新的freemarker.core.Environment
),则将无法获得支持。 如果你并不真的需要一个新的模板背景下出现,你可以得到的Environment
更高了静态Environment.getCurrentEnvironment()
然后使用Environment. include
Environment. include
调用第二个FTL。 但是,您将在那里使用与最顶层FTL相同的模板创建的变量集。 (如果第二个FTL仅定义一个宏并对其进行调用,则可以有所改善,因为该宏至少可以具有本地变量。)因此,您可以在以下情况下尝试从更高的Environment
重用dataModel
(使用Environment.getDataModel()
):您称为第二个FTL。 我想它应该可以工作...从未尝试过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.