Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
Servlets Post 2.0.4, Engine 2.0.6
-
None
Description
When posting a form to the sling post servlet i encountered that the order of the request parameters is not preserved,
even the browser sends the params according to the submitted form.
for example the following form:
<form name="input" action="/content/testform" method="POST">
<input type="hidden" name="./sendTo@Delete"/><br/>
Address 0: <input type="text" name="./sendTo/0/address" /><br/>
Text 0: <input type="text" name="./sendTo/0/text" /><br/>
Address 1: <input type="text" name="./sendTo/1/address" /><br/>
Text 1: <input type="text" name="./sendTo/1/text" /><br/>
Address 2: <input type="text" name="./sendTo/2/address" /><br/>
Text 2: <input type="text" name="./sendTo/2/text" /><br/>
<input type="submit" value="Submit" />
</form>
results in:
deleted("/content/testform/sendTo");
created("/content/testform/sendTo");
created("/content/testform/sendTo/2");
modified("/content/testform/sendTo/2/address");
modified("/content/testform/sendTo/2/text");
created("/content/testform/sendTo/1");
modified("/content/testform/sendTo/1/text");
created("/content/testform/sendTo/0");
modified("/content/testform/sendTo/0/text");
modified("/content/testform/sendTo/0/address");
modified("/content/testform/sendTo/1/address");
i first thought it's just the ModifyOperation which uses a HashMap instead of a LinkedHashMap:
Map<String, RequestProperty> reqProperties = new HashMap<String, RequestProperty>();
but the params arrive out of order already from the request.getParameterMap().
i guess the "ParameterMap" needs to extend from LinkedHashMap, too:
class ParameterMap extends LinkedHashMap<String, RequestParameter[]> ...
after fixing those 2 classes, the order is correct:
deleted("/content/testform/sendTo");
created("/content/testform/sendTo");
created("/content/testform/sendTo/0");
modified("/content/testform/sendTo/0/address");
modified("/content/testform/sendTo/0/text");
created("/content/testform/sendTo/1");
modified("/content/testform/sendTo/1/address");
modified("/content/testform/sendTo/1/text");
created("/content/testform/sendTo/2");
modified("/content/testform/sendTo/2/address");
modified("/content/testform/sendTo/2/text");
i'll attach the patch