Im using Magnolia RenderingModel
in combination with Freemarker.
I have URLs like the following:
http://anyPath/context?productTypes=XXXXX&productTypes=YYYYY
my rendering model class looks like:
class MyModel extends RenderingModelImpl {
...
private String[] productTypes;
...
}
However the mentioned array contains only the first value, but not the second.
I checked the behaviour of template directives like ctx.getParameters()
. This shows the same behaviour, I get only the first value returned. But if im using ctx.getParameterValues(paramName)
, it returns both values.
This leads me to following questions:
It used to be mentioned in documentation and I believe it still is - if you use .getParameters()
you get only first value for multivalue parameter. If you want to get all the values, you need to use .getParameterValues(String param)
.
From what I understand reasons for that were backward compatibility.
As for changing the behavior, you would need to write your own renderer (e.g. by extending default FreemarkerRenderer
and override info.magnolia.rendering.renderer.AbstractRenderer.newModel(Class<T>, Node, RenderableDefinition, RenderingModel<?>)
method which instantiates and populates the model class.
Alternatively you can provide fix for above set population method and submit it to Magnolia as a patch. While the .getParameters()
behavior is iirc on purpose, the model param population might not be, so you have high chance of getting that changed.