Как получить значения getParameterValues ​​в порядке их отправки?

Я отправляю данные регистрационной формы через метод HttpPost в Servlet и получаю эти данные с помощью getParameterValues.

Нет проблем с получением данных, но я получаю данные в случайном порядке. Я хочу, чтобы в сервлете я получал данные в порядке их отправки. Я пытаюсь решить это, читая в Интернете, но ничего не может помочь. Я отправляю свой код сервлета здесь.

response.setContentType("text/html");
    ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
    Enumeration paramNames = request.getParameterNames();
    String params[] = new String[7];
    int i=0;

    while(paramNames.hasMoreElements())
    {
        String paramName = (String) paramNames.nextElement();
        System.out.println(paramName);


        String[] paramValues = request.getParameterValues(paramName);
        params[i] = paramValues[0];

        System.out.println(params[i]);

        i++;
    }

Я получаю вывод, как это

5_Country
United States
4_Password
zxcbbnm
1_Lastname
xyz
0_Firstname
abc
3_Email
[email protected]
6_Mobile
1471471471
2_Username
abcd

Я хочу сначала 0_Firstname, затем 1_Lastname, затем 2_Username, потому что я хочу вставить эти данные в базу данных. Здесь 0,1,2... Я написал только для того, чтобы указать, что я хочу значение в этом порядке.


person Bhargav Thanki    schedule 13.11.2014    source источник
comment
Параметр динамический или фиксированный?   -  person Saurabh    schedule 14.11.2014
comment
Взгляните на эту ссылку   -  person Sivakumar    schedule 14.11.2014


Ответы (2)


Вы не получите имена параметров по порядку, используя request.getParameterNames(); .

Вы можете либо использовать

String [] parameterNames =  new String[]{"param1","param2","param3"};

for(String param : parameterNames){
 System.out.println(param);
}

где parameterNames содержит последовательность, в которой вы хотите использовать свои параметры. Вы даже можете настроить его и прочитать последовательность из файла конфигурации.

OR

Вы можете использовать

 request.getQueryString() to get the QueryString, while using GET Method

OR

Вы можете использовать

 request.getInputStream() to get the QueryString, while using POST Method
 and parse the raw data to get the Query string.

Получив строку запроса, вы можете разделить и использовать ее так, как хотите.

person Anurag Anand    schedule 14.11.2014
comment
В первом методе вашего решения, как я могу получить значение параметров. Я могу получить параметр последовательно. - person Bhargav Thanki; 14.11.2014
comment
@bhargav спасибо Извините по ошибке, я написал System.out.println . Я имел в виду request.getParameter(param) . - person Anurag Anand; 15.11.2014

Попробуй это

Enumeration<String> enumParamNames = request.getParameterNames();

Преобразуйте Enumeration в List, чтобы отсортировать их.

List<String> listParamNames = Collections.list(enumParamNames);

ParamNames будут выглядеть так до сортировки

[5_Country, 4_Password, 1_Lastname, 0_Firstname, 2_Username, 3_Email]

Отсортировать список по Collections.sort(listParamNames);

Отсортированные paramNames будут выглядеть так

[0_Firstname, 1_Lastname, 2_Username, 3_Email, 4_Password, 5_Country]

Теперь вы можете выполнить цикл с listParamNames, чтобы получить связанный param value

for(String paramName : listParamNames)
{
    System.out.println(paramName);
    System.out.print("\t");

    /* Instead of using getParameterValues() which will get you String array, in your case no need for that. You need only one `Value`, so you go with `getParameter` */
    System.out.print(request.getParameter(paramName));
}

Вывод:

0_Firstname - abc

1_Lastname - xyz

etc....

person Sivakumar    schedule 14.11.2014
comment
когда я пишу String[] parameterNames = request.getParameterNames(); Это дает ошибку изменения типа параметраNames в Enumeration‹String› - person Bhargav Thanki; 14.11.2014
comment
@bhargavthanki Посмотрите мой обновленный ответ с Enumeration - person Sivakumar; 17.11.2014