2011-01-19 12 views
14

Cómo obtengo todos los parameterNames en un formulario HTML en con la misma secuencia que en el formulario.Orden de request.getParameterNames()

es decir, si el formulario contiene .... Nombre, Apellido, MiddleName y Edad. la salida debe aparecer en la misma secuencia

He intentado usar el siguiente, pero esto cambia el orden de la salida:

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

Hmmm .. si explica su requisito, obtendrá mejores soluciones. Siempre puede pasar su pedido como un parámetro de formulario independiente. request.setParameter ("form_ordering", data) o si el orden de formulario es relativamente estable, externalice los detalles del formulario en un archivo de propiedad o use ajax para hablar con el servidor. Las bibliotecas de Ajax pueden convertir los valores de sus formularios en Json y, por lo general, la operación es en serie. –

+0

¿Por qué te importa la secuencia? El problema probablemente se resuelva en otro lado. – BalusC

+1

Véase también http://stackoverflow.com/questions/2317281/ordering-of-values-in-httpservletrequest-getparametervalues ​​ – skaffman

Respuesta

8

No creo que no hay nada en la especificación HTTP que obliga a los navegadores para enviar parámetros en el orden en que aparecen en el formulario. Puede trabajar alrededor anteponiendo un número al nombre del parámetro como:

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

Después de que se podía básicamente ordenar los elementos por el prefijo. Es una solución fea pero es la única forma de hacerlo. Algo como ...

//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 
    } 

Por cierto, ¿realmente importa el orden en que recibe los parámetros?

+0

No quise ordenar los parámetros, pero recuperarlos en el orden en que los agregué a la solicitud. Pero gracias por responder al – jcdmb

+1

. De eso se trata, no hay un orden implícito para los parámetros en la solicitud HTTP. Si desea mantener el orden, debe establecer ese orden en la forma en que nombra los parámetros y luego ordenarlos cuando los obtenga en el lado del servidor. Así que, básicamente, esta es la única forma de recuperarlos en orden. –

2

request.getParameterNames() utiliza HashMap internamente para almacenar los pares de nombre y valor de los campos de formulario. No hay un orden mantenido en esto. si necesita esto en orden, entonces, algún tipo de convención de nomenclatura para los parámetros del formulario para controlar el orden de recuperación.

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

No quise ordenar los parámetros, sino recuperarlos en el orden en que los agregué a la solicitud. Pero gracias por responder. – jcdmb

3

Ninguna de las respuestas aquí realmente respondió mi pregunta. Un HttpServletRequest guarda todos sus parámetros en un HashMap, y un HashMap NO TIENE PEDIDO. Por lo tanto, guardé el orden de los parámetros en un ArrayList ordenado y lo guardé en una HttpSession, para poder recuperar el orden de los parámetros al consultar el ArrayList (que se guardó en la sesión) y ¡lograr lo que quería!

+2

Eso ya fue respondido por msalvadores. ¿Por qué estás replicando su respuesta? Simplemente marque su respuesta aceptada para indicar que resolvió el problema por usted. – BalusC

+0

Probablemente usó 'request.getQueryString()' y dividió y almacenó manualmente los parámetros en la sesión. Si ese es el caso, la respuesta de msalvadores no es lo mismo que su "solución", porque no necesitaría especificar nombres de parámetros personalizados. –

2

Actualizado: U puede el usuario ordenar el conjunto para eso. tenga en cuenta que debe tener todos los parámetros con diferentes nombres. (en este caso es más probable) Escriba cualquier pref.ix como su nombre de parámetro para ej.

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

y así sucesivamente ...

luego en código Java se puede escribir

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

HTML o página JSP

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

y así sucesivamente ...

luego en código 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); 
}