Uploaded image for project: 'Sling'
  1. Sling
  2. SLING-1178

Preserve request parameter order throughout the entire request stack

    XMLWordPrintableJSON

Details

    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

      Attachments

        1. ordered_params-r834673.patch
          2 kB
          Tobias Bocanegra

        Activity

          People

            fmeschbe Felix Meschberger
            tripod Tobias Bocanegra
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: