请求参数如何映射到木兰的 RenderingModel 中?

Posted

技术标签:

【中文标题】请求参数如何映射到木兰的 RenderingModel 中?【英文标题】:How are request parameters mapped into RenderingModel of magnolia? 【发布时间】:2017-05-05 19:49:40 【问题描述】:

我将 Magnolia RenderingModel 与 Freemarker 结合使用。 我有如下网址:

http://anyPath/context?productTypes=XXXXX&productTypes=YYYYY

我的渲染模型类看起来像:

 class MyModel extends RenderingModelImpl 
   ...
   private String[] productTypes;
   ...
 

但是,提到的数组只包含第一个值,而不包含第二个值。 我检查了ctx.getParameters() 等模板指令的行为。这显示了相同的行为,我只得到返回的第一个值。但如果我使用ctx.getParameterValues(paramName),它会返回两个值。

这导致我提出以下问题:

如果我想查找请求参数是如何映射到渲染模型中的,或者更好,我该怎么做: 如何改变它的行为? 谁能承认,这种行为是错误的?

【问题讨论】:

【参考方案1】:

它曾经在文档中被提及,我相信它仍然是 - 如果您使用.getParameters(),您只会获得多值参数的第一个值。如果要获取所有值,需要使用.getParameterValues(String param)

据我了解,原因是向后兼容。

至于改变行为,您需要编写自己的渲染器(例如,通过扩展默认 FreemarkerRenderer 并覆盖 info.magnolia.rendering.renderer.AbstractRenderer.newModel(Class<T>, Node, RenderableDefinition, RenderingModel<?>) 实例化和填充模型类的方法。

或者,您可以为上述设置的填充方法提供修复,并将其作为补丁提交给 Magnolia。虽然 .getParameters() 行为是 iirc 故意的,但模型参数群体可能不是,所以你很有可能得到改变。

【讨论】:

以上是关于请求参数如何映射到木兰的 RenderingModel 中?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 前端请求参数自动映射到枚举,后端响应JSON数据自动解析枚举

如何从 Eclipse 调试木兰花模块应用程序?

Spring Boot 2从入门到入坟 | 请求参数处理篇:REST映射原理的详细分析

Spring Boot 2从入门到入坟 | 请求参数处理篇:REST映射原理的详细分析

一文深入浅出理解国产开源木兰许可系列协议

Spring 3 MVC - 将带有前缀的请求参数映射到单个 bean