2011-01-19 17 views
14

如何在 的HTML表單中獲取與表單中相同的HTML表單中的所有parameterNames。request.getParameterNames()的順序

即,如果表格包含.... FirstName,LastName, MiddleName and Age。輸出應出現在 相同序列

我已經使用以下嘗試,但此將這個 順序輸出的:

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

嗯..如果你解釋你的要求,你會得到更好的解決方案。您始終可以將您的訂單作爲單獨的表單參數傳遞。 request.setParameter(「form_ordering」,data)或者如果表單順序相對穩定,則將屬性文件中的表單細節外部化或使用ajax與服務器交談。 Ajax庫可以將表單值轉換爲Json,並且通常該操作是串行的。 – 2011-01-19 09:32:24

+0

你爲什麼關心序列?這個問題很可能在其他地方解決。 – BalusC 2011-01-19 13:07:54

+1

另請參閱http://stackoverflow.com/questions/2317281/ordering-of-values-in-httpservletrequest-getparametervalues – skaffman 2012-03-28 12:39:29

回答

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 
    } 

順便說一句 - 它真的很重要的順序,你收到的參數?

2

request.getParameterNames()使用HashMap內部存儲表單字段的名稱值對。這裏沒有訂單。如果你需要這個,那麼,某種形式參數的命名約定來控制檢索順序。

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

我不想排序參數,而是按照將它們添加到請求的順序檢索它們。但謝謝你的回答。 – jcdmb 2011-01-20 10:35:15

3

這裏沒有答案真的回答了我的問題。 HttpServletRequest將所有參數保存在HashMap中,並且HashMap沒有ORDER。所以,我將參數的順序保存在一個有序的ArrayList中,並將其保存在一個HttpSession中,這樣我就可以通過查詢ArrayList(保存在會話中)並獲得我想要的內容來檢索參數的順序!

2

更新: U可以爲用戶排序設置。請注意,你必須擁有不同名稱的所有參數。 (在這種情況下很可能) 將任何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); 
    } 
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); 
}