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

How are request parameters mapped into RenderingModel of magnolia?

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

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

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

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

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

这让我想到以下问题:

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

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

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

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