请求参数如何映射到 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 故意的,但模型参数可能不是,所以你很有可能改变它。
我将 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 故意的,但模型参数可能不是,所以你很有可能改变它。