Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java springmvc&;FreeMarker&;自定义标记库_Java_Spring_Spring Mvc_Freemarker_Taglib - Fatal编程技术网

Java springmvc&;FreeMarker&;自定义标记库

Java springmvc&;FreeMarker&;自定义标记库,java,spring,spring-mvc,freemarker,taglib,Java,Spring,Spring Mvc,Freemarker,Taglib,在带有FreeMarker的SpringMVC环境中,我有一个定制的TagLib,它处理带有数据的ftl模板,并将结果写入标记的JSP上下文中 当我从一个解析视图调用这个标记时(意味着从一个控制器呈现的模板调用),行为是完全正确的 controller -> FTL -> TagLib 但是,当我从模板中调用它以供同一标记的另一个实例处理时,我得到了一个错误(标记未定义),当我在FTL中添加#assign语句时,我也得到了一个错误(JspTagLibs为nu

在带有FreeMarker的SpringMVC环境中,我有一个定制的TagLib,它处理带有数据的ftl模板,并将结果写入标记的JSP上下文中

当我从一个解析视图调用这个标记时(意味着从一个控制器呈现的模板调用),行为是完全正确的

controller
    -> FTL
        -> TagLib
但是,当我从模板中调用它以供同一标记的另一个实例处理时,我得到了一个错误(标记未定义),当我在FTL中添加#assign语句时,我也得到了一个错误(JspTagLibs为null)

我怎样才能解决这个问题


要从FTL调用JSP标记,需要一个特殊的模板上下文(FTL术语中的数据模型)来实现它。我假设Spring为初始调用提供了这样的上下文。但是在第二种情况下,如果您从一个新的模板上下文开始(实际上是一个新的
freemarker.core.Environment
),那么您将无法获得支持。如果您真的不需要新的模板上下文,您可以使用static
Environment.getCurrentEnvironment()
环境提升到更高的级别,然后使用
环境。包括
呼叫第二个FTL。但是,您将使用与最顶层FTL中相同的模板创建变量集。(如果第二个FTL只定义一个宏并调用它,这可能会有所改进,因为该宏至少可以有局部变量。)因此,在调用第二个FTL时,您可以尝试从更高的
环境中重用
数据模型
(使用
环境.getDataModel()
)。我想它应该有用。。。从来没有试过

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