Order of request.getParameterNames()

2022-09-03 14:52:01

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

例:

  • 如果表单包含 、 和FirstNameLastNameAge

  • 输出应以相同的顺序显示

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

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

答案 1

我不认为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

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


推荐