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

时间:2016-12-20 14:45:23

标签: freemarker url-parameters magnolia

我正在使用Magnolia RenderingModel与Freemarker结合使用。 我有以下网址:

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

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

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

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

这引出了以下问题:

  • 如果我想查询请求参数如何映射到渲染模型,或者更好,我该怎么办:
  • 我怎样才能改变那种行为?
  • 任何人都可以承认,这种行为是错误的吗?

1 个答案:

答案 0 :(得分:2)

以前在文档中提到它,我相信它仍然是 - 如果你使用.getParameters(),你只得到多值参数的第一个值。如果您想获得所有值,则需要使用.getParameterValues(String param)

据我所知,原因是向后兼容性。

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

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