Description
I implemented a simple struts2+tiles (Struts 2 core version: 2.3.24.1) as a test case to verify an issue that have.
In detail, i have the following Struts form:
<s:form action="save"> <s:hidden name="metadataTest.name" value="Level-1_new" /> <s:hidden name="metadataTest.metadataList[0].name" value="Level-2_new" /> <s:hidden name="metadataTest.metadataList[0].metadataList[0].name" value="Level-3_new" /> <s:hidden name="metadataTest.metadataList[0].metadataList[0].metadataList[0].name" value="Level-4_new" /> <s:hidden name="metadataTest.metadataList[0].metadataList[0].metadataList[0].metadataList[0].name" value="Level-5_new" /> <s:hidden name="metadataTest.metadataList[0].metadataList[0].metadataList[0].metadataList[0].metadataList[0].name" value="Level-6_new" /> <s:hidden name="metadataTest.metadataList[0].metadataList[0].metadataList[0].metadataList[0].metadataList[0].metadataList[0].name" value="Level-7_new" /> <s:submit/> </s:form>
The metadataTest class:
public class Metadata implements Serializable { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 5902230367443812176L; private String name; private ArrayList<Metadata> metadataList; public Metadata() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public ArrayList<Metadata> getMetadataList() { return metadataList; } public void setMetadataList(ArrayList<Metadata> metadataList) { this.metadataList = metadataList; } }
My issue here is following. When i submit this form, all values up to this level, are set correctly
<s:hidden name="metadataTest.metadataList[0].metadataList[0].metadataList[0].metadataList[0].metadataList[0].name" value="Level-6_new" />
For some reason the below hidden element is never set, instead, the medataList at level 6 is null, while the name set by the hidden field above, is set correctly.
<s:hidden name="metadataTest.metadataList[0].metadataList[0].metadataList[0].metadataList[0].metadataList[0].metadataList[0].name" value="Level-7_new" />
Is there any kind of limitation by struts concerning the depth in a list hierarchie or maybe the length of path to set a value ? I could not find something related.
Note 1: It surely has to do something with the length of the parameters. Once i changed the variable names to longer ones, i was able to set values only up to Level 3.
Note 2: Downgrading to Struts 2.1.6 resolves the issue. Also latest version 2.5.22 seems to be afffected from the exact same issue. Is there any workaround ?