15

如何parameterNames以相同的顺序获取 HTML 表单中的所有内容?

例子:

  • 如果表单包含FirstName,LastNameAge

  • 输出应该以相同的顺序出现

我尝试过使用以下内容,但这会改变输出的顺序:

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

5 回答 5

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
}

顺便说一句 - 你接收参数的顺序真的很重要吗?

于 2011-01-19T09:15:00.183 回答
3

这里的答案都没有真正回答我的问题。HttpServletRequest 将其所有参数保存在 HashMap 中,而 HashMap 没有 ORDER。因此,我将参数的顺序保存在有序的 ArrayList 中,并将其保存在 HttpSession 中,这样我就可以通过查询 ArrayList(保存在会话中)来检索参数的顺序并实现我想要的!

于 2011-01-20T10:33:57.550 回答
2

request.getParameterNames ()在内部使用HashMap 来存储表单字段的名称值对。在此没有维持秩序。如果您需要按顺序排列,则可以使用某种形式参数的命名约定来控制检索顺序。

SortedSet temp = new SortedSet();
Enumeration enumeration = request.getParameterNames();
while (enumeration.hasMoreElements()) 
{
        temp.add((String)enumeration.nextElement());
}
于 2011-01-19T09:12:52.883 回答
2

更新:您可以为此使用排序集。请注意,您必须拥有具有不同名称的所有参数(在这种情况下很可能)。写任何前缀作为您的参数名称。

例子:

<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);
}
    
于 2012-03-28T09:07:07.490 回答
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);
}
于 2017-03-02T06:17:33.093 回答