Порядок запроса.getParameterNames()

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

Пример:

  • Если форма содержит FirstName, LastNameи Age

  • Вывод должен отображаться точно в той же последовательности.

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

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

person jcdmb    schedule 19.01.2011    source источник
comment
Хммм ... если вы объясните свое требование, вы получите лучшие решения. Вы всегда можете передать свой заказ как отдельный параметр формы. request.setParameter(form_ordering, data) или, если порядок форм относительно стабилен, экспортируйте детали формы в файл свойств или используйте ajax для связи с сервером. Библиотеки Ajax могут преобразовывать значения вашей формы в Json, и обычно операция выполняется последовательно.   -  person uncaught_exceptions    schedule 19.01.2011
comment
См. также stackoverflow.com/questions/2317281/   -  person skaffman    schedule 28.03.2012


Ответы (5)


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

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

person Manuel Salvadores    schedule 19.01.2011
comment
Я хотел не сортировать параметры, а получить их в том порядке, в котором я добавил их в запрос. Но спасибо за ответ - person jcdmb; 20.01.2011
comment
В том-то и дело, что в HTTP-запросе нет неявного порядка параметров. Если вы хотите сохранить порядок, вы должны установить этот порядок так, как вы называете параметры, а затем сортировать их, когда вы получаете их на стороне сервера. Так что в основном это единственный способ получить их по порядку. - person Manuel Salvadores; 20.01.2011

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

person jcdmb    schedule 20.01.2011
comment
На это уже ответил msalvadores. Почему вы копируете его ответ? Просто отметьте его ответ принятым, чтобы указать, что он решил проблему для вас. - person BalusC; 20.01.2011
comment
Вероятно, он использовал request.getQueryString() и вручную разделил и сохранил параметры в сеансе. Если это так, ответ msalvadores не совпадает с его решением, потому что ему не нужно указывать имена настраиваемых параметров. - person Fagner Brack; 21.11.2014

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

SortedSet temp = new SortedSet();
Enumeration enumeration = request.getParameterNames();
while (enumeration.hasMoreElements()) 
{
        temp.add((String)enumeration.nextElement());
}
person Dead Programmer    schedule 19.01.2011
comment
Я хотел не сортировать параметры, а получить их в том порядке, в котором я добавил их в запрос. Но спасибо за ответ. - person jcdmb; 20.01.2011

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

Пример:

<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);
}
    
person MKDoshi    schedule 28.03.2012

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);
}
person Nilesh    schedule 02.03.2017