【问题标题】:Getting the nth values from request.getParameterMap()从 request.getParameterMap() 获取第 n 个值
【发布时间】:2013-04-30 22:59:40
【问题描述】:

我有一些从request.getParameterMap() 获得的参数,我想遍历 Map 并从 Map 的每一行中获取第 n 个值。以下是数据示例

地图包含:

recordNo:1,2,3,4,5,6
dob:19800101,19800201,'',19930101,19940101,19950302
addressLn1: well street, prince street,lewis street,edward street,mills street, #3 rich street

我拥有的是一个包含此数据的 Map,我想遍历数据并从 Map 数组中获取第 n 条记录。这就是我想要的

第一次迭代打印: 1,19800101,井街

第二次迭代打印: 2,19800201,太子街

代码:

 Map map = request.getParameterMap();

  for(int i = 0; i< map.size();i++){

    //how can i access the values with the array at the nth position            
     System.out.println("Value at " +i+ " " +map.get(i).toString());

   }

【问题讨论】:

  • 它是地图而不是列表有什么原因吗?
  • 我从表单中得到了值,有同名的元素
  • 这个SO问题或许能给你一些提示:stackoverflow.com/questions/1509391/…
  • 你为什么不使用泛型?没有泛型就很难弄清楚你在问什么。
  • 看看你要做什么,这基本上是错误的做法。创建一个包含 dobaddress(以及其他任何内容)的 POJO,并将它们添加到 Map&lt;Integer, MyPojo&gt; 或仅使用 ArrayList&lt;MyPojo&gt;

标签: java arrays servlets map httprequest


【解决方案1】:

您的数据结构在概念上不正确,因此您的所有问题。

您应该将数据保存在 Java Bean 中:

public class MyBean {
    private String recordNo; // is it an int?
    private String dob; // is it a Date?
    private String addressLn1;
    // getters/setters omitted
}

然后以某种方式将其添加到 List&lt;MyBean&gt; 并遍历它:

List<MyBean> list = new ArrayList<MyBean>();
// list gets populated in some way, then
for(MyBean bean : list) {
     bean.getDob();
     ...
}

看来您正在处理 HTTP 请求并从中获取参数映射。在这种情况下,您不能只依赖该映射上的参数顺序 - recordNo 数组的顺序可能(并且很可能)与 dob 数组的顺序不同。

在您的情况下,您需要做的是为您的输入提供 HTML 唯一名称,例如 recordNo0recordNo1dob0dob1 - 这样您就可以保证 bod 对应于正确的 recordNo :

<c:forEach varStatus="status" items="${yourCollection}">
    <input type='text' name='recordNo${status.index}' value='some value'>
    <input type='text' name='dob${status.index}' value='some value'>
</c:forEach>

然后,您需要遍历 servlet 中的参数或构建 MyBeans 所需的任何参数,并将它们收集到数组中:

List<MyBean> list = new ArrayList<MyBean>();
for(int i=0; ;i++) {
    String recNo = request.getParameter("recordNo"+i);
    if(recNo == null) break;
    MyBean bean = new MyBean();
    bean.setRecordNo(recNo);
    bean.setDob(request.getParameter("dob"+i));
    // etc
}

【讨论】:

  • 我现在正在尝试这个我想将 request.getParameterMap() 传递到列表中
  • 所以你应该从那个开始 - 你有来自 HTTP 请求的参数,你需要将它们转换成更好的结构......
  • 我无法将 request.getParameterMap() 传递到 List 或 ArrayList
  • 我正在尝试这个 List studentList = new ArrayList(); studentList = (List) request.getParameterMap();但它不符合
  • 更新了我的答案 - 您需要在 HTML 中重命名参数,您将永远无法使 getParameterMap 工作
猜你喜欢
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 2013-12-28
  • 2015-11-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多