Порядок request.getParameterNames () - PullRequest
       14

Порядок request.getParameterNames ()

14 голосов
/ 19 января 2011

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

, т. Е. Если форма содержит .... FirstName, LastName, MiddleName и Age.вывод должен отображаться в той же последовательности

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

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

Ответы [ 5 ]

8 голосов
/ 19 января 2011

Я не думаю, что в спецификации 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
    }

Кстати - действительно ли имеет значение порядок, в котором вы получаете параметры?

3 голосов
/ 20 января 2011

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

2 голосов
/ 28 марта 2012

Обновлен: Вы можете отсортировать пользовательский набор для этого. обратите внимание, что у вас должны быть все параметры с другим именем. (в этом случае это наиболее вероятно) Напишите любой 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);
    }
2 голосов
/ 19 января 2011

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

SortedSet temp = new SortedSet();
Enumeration enumeration = request.getParameterNames();
while (enumeration.hasMoreElements()) 
{
        temp.add((String)enumeration.nextElement());
}
0 голосов
/ 02 марта 2017

HTML или JSP Page

<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);
}
...