2011-01-19 9 views
14

のHTMLフォームのすべてのparameterNamesをフォームの中と同じ順序で取得するにはどうすればよいですか。order of request.getParameterNames()

つまり、フォームに.... FirstName、LastName、 ミドルネームと年齢が含まれているとします。

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

おはようございます。あなたの要件を説明すると、より良い解決策が得られます。あなたはいつも別のフォームパラメータとして注文を渡すことができます。 request.setParameter( "form_ordering"、data)、またはフォームの順序が比較的安定している場合は、プロパティー・ファイルのフォームの詳細を外部化するか、ajaxを使用してサーバーと通信します。 Ajaxライブラリはフォームの値をJsonに変換でき、通常は操作はシリアルです。 –

+0

なぜシーケンスについて気にしますか?この問題は、他の場所で解決される可能性があります。 – BalusC

+1

も参照してください。http://stackoverflow.com/questions/2317281/ordering-of-values-in-httpservletrequest-getparametervalues – skaffman

答えて

8

私は、彼らは、フォームに表示される順番にパラメータを送信するためにブラウザを強制的に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 
    } 

ところで - あなたがパラメータを受け取る順序は本当に重要ですか?

+0

私はパラメータを並べ替えるのではなく、要求に追加した順にそれらを取得することを望んでいました。しかし、お返事いただきありがとうございます – jcdmb

+1

これは、HTTPリクエストのパラメータの暗黙の順序がないことです。順序を保持したい場合は、パラメーターの名前を付けてサーバー側で取得するときに並べ替える方法で順序を確立する必要があります。したがって、基本的には、これを順番に検索する唯一の方法です。 –

2

request.getParameterNames()は、フォームフィールドの名前と値のペアを格納するために内部HashMapを使用しています。出力は、私は次のように使用して試してみましたが、これは出力の 順序をシフト

に 同じ順序で表示されます。これには順序が維持されていません。これを必要とする場合は、検索順序を制御するためのフォームパラメータの命名規則があります。

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

私はパラメータを並べ替えるのではなく、要求に追加した順にそれらを取得したいと思います。しかし、お返事いただきありがとうございます。 – jcdmb

3

ここの回答は本当に私の質問には答えませんでした。 HttpServletRequestはすべてのパラメータをHashMapに保存し、HashMapにはORDERはありません。そこで、順序付けられたArrayListにパラメータの順序を保存し、HttpSessionに保存しました。そのため、ArrayList(セッションで保存されたもの)を照会してパラメータの順序を取得し、必要なものを実現できました。

+2

これはすでにmsalvadoresによって回答されています。なぜあなたは彼の答えを複製していますか?彼の答えはあなたのために問題を解決したことを示すために受け入れてください。 – BalusC

+0

彼は 'request.getQueryString()'をおそらく使用し、手動でセッションを分割して保存しました。その場合、カスタムパラメータ名を指定する必要がないため、msalvadoresの答えは彼の "解"と同じではありません。 –

2

更新日: ユーザーはそれをソートできます。異なる名前のすべてのパラメータを持つ必要があります。 (この場合は、おそらくそうです) exのパラメータ名としてpref.ixを書き込みます。

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

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