Заказ request.getParameterNames()

Как получить все имена параметров в HTML-форме в той же последовательности, что и в форме.

i.e, если форма содержит.... FirstName, LastName, MiddleName и Age. выход должен появиться в такая же последовательность

Я попытался использовать следующее, но это сдвигает порядок вывода:

Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements())
{
      String paramName =
(String)paramNames.nextElement();
      out.print(paramName);
}

Ответы

Ответ 1

Я не думаю, что в спецификации HTTP нет ничего, что заставляет браузеры отправлять параметры в том порядке, в каком они появляются в форме. Вы можете работать с ним, указав номер на имя параметра, например:

FirstName --> 0_FirstName
LastName --> 1_LastName
....

После этого вы могли бы упорядочить элементы по префиксу. Это уродливое решение, но это единственный способ сделать это. Что-то вроде...

//Assuming you fill listOfParameters with all the parameters.
    Collections.sort(listOfParameters, new Comparator<String>() {
       int compare(String a,String b) {
            return Integer.getInt(a.substring(0,a.indexOf("_"))) - Integer.getInt(a.substring(0,b.indexOf("_")))
       }
    }
    );
    for (String param : listOfParameters) {
        //traverse in order of the prefix
    }
Кстати, действительно ли имеет значение порядок, в котором вы получаете параметры?

Ответ 2

Ни один из ответов здесь действительно не ответил на мой вопрос. HttpServletRequest сохраняет все его параметры в HashMap, а у HashMap нет ORDER. Таким образом, я сохранил порядок параметров в упорядоченном массиве ArrayList и сохранил его в HttpSession, поэтому я мог получить порядок параметров, запросив ArrayList (который был сохранен в сеансе) и достигнуть того, что я хотел!

Ответ 3

request.getParameterNames () использует HashMap внутренне, чтобы хранить пары значений имени полей формы. В этом нет порядка. если вам это нужно, тогда какое-либо соглашение об именах для параметров формы для управления порядком извлечения.

SortedSet temp = new SortedSet();
Enumeration enumeration = request.getParameterNames();
while (enumeration.hasMoreElements()) 
{
        temp.add((String)enumeration.nextElement());
}

Ответ 4

Обновлено: U может отсортировать пользователя для этого. обратите внимание, что u должен иметь все параметры с другим именем. (в данном случае это, скорее всего) Напишите любой pref.ix в качестве имени параметра для ex.

    <input type="text" name="1step">
    <input type="text" name="2step">

и т.д.

то в java-коде вы можете написать

    SortedSet ss = new TreeSet();
     Enumeration<String> enm=request.getParameterNames();
    while(enm.hasMoreElements())
    {
        String pname = enm.nextElement();
    }
            Iterator i=ss.iterator();
            while(i.hasNext())
    {
        String param=(String)i.next();
        String value=request.getParameter(param);
    }

Ответ 5

HTML или Jsp Страница

<input type="text" name="1UserName">
<input type="text" name="2Password">
<input type="text" name="3MobileNo">
<input type="text" name="4country">

и т.д.

то в java-коде

SortedSet ss = new TreeSet();
Enumeration<String> enm=request.getParameterNames();
while(enm.hasMoreElements()){
    String pname = enm.nextElement();
    ss.add(pname);
}
Iterator i=ss.iterator();
while(i.hasNext()) {
    String param=(String)i.next();
    String value=request.getParameter(param);
}