spring.ftl的bind宏中调用的springMacroRequestContext是什么?

问题描述 投票:4回答:2

Springframework能够与freemarker模板引擎集成。 Spring提供了一个带有核心宏的spring.ftl,以及简化表单支持的功能。调用为您构建表单域的宏以及解析值选择(即使对于singleSelects或multiSelects)。

执行神话的基本组件是它们的绑定宏,它调用一些神秘的springMacroRequestContext来获取绑定状态信息。

这个变量来自何处以及它背后隐藏着什么?

spring spring-mvc macros freemarker
2个回答
7
投票

负责这是由org.springframework.web.servlet.view.AbstractTemplateView提供的类spring-mvc.*.jar - 第154行/方法renderMergedOutputModel(.*)

模板变量通过硬编码注入。除了其他一些环境因素,我认识到了。

当使用springMacroRequestContext时,我们正在讨论org.springframework.web.servlet.support.RequestContext的一个实例。

bind调用创建了org.springframework.web.servlet.support.BindStatus的实例。

我不写博客。但也许像我这样的人正在寻找这个以了解正在发生的事情:)


0
投票

通过研究发现,以下过程序列需要手动实例化:

String SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE = "springMacroRequestContext";
Map<String, Object> model = new HashMap();
model.put(SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE,
                    new RequestContext(request, /*response, */
                                            /*request.getSession().getServletContext(),*/
                                            /*getServletContext()*/ model));

然后

Template t = freemarkerConfig.getConfiguration().getTemplate(templateName);
String text = FreeMarkerTemplateUtils.processTemplateIntoString(t, model);

它将无缝地为开发人员提供对常见弹簧“宏”的访问(如spring.message,singleSelects和其他)。

很明显,它至少需要传递非空的http servlet请求实例。

现在我正在寻找springMacroRequestContext的实例化方法,以解决http servlet请求实例不可用的情况。

现在:我不知道“这个变量来自哪里来”最初,因为我没有调试或追踪spring自己的实例化。然而,我部分地回答了问题的第二部分:“以及隐藏在它背后的东西”所以实际上它是一个RequestContext();

© www.soinside.com 2019 - 2024. All rights reserved.