【问题标题】:How to iterate through list of objects in jsp如何遍历jsp中的对象列表
【发布时间】:2015-03-17 16:26:12
【问题描述】:

嗨朋友们,我正在尝试遍历包含对象列表的列表 我正在尝试遍历该列表。列表的每个元素都是一个“对象”。 我在 c:forEach 的帮助下访问了那个“对象”的变量。我得到了价值观。但一次又一次的相同。 我不知道在迭代它们时将对象添加到 servlet 或 jsp 中的列表时是否犯了任何错误。

这是我的 servlet 代码

FileInfo fileInfo = new FileInfo();
            List<FileInfo> fileInfoList = new ArrayList<FileInfo>();

            HashMap<String, String> uploadHistory = new HashMap<String, String>();

            while(rs.next()) {

                fileInfo.setFile_id(rs.getString("file_id"));
                fileInfo.setFile_name(rs.getString("file_name"));
                fileInfo.setUpload_time(rs.getString("upload_time"));
                fileInfo.setUsername(rs.getString("username"));     

                fileInfoList.add(fileInfo);

                uploadHistory.put(rs.getString("file_name"),rs.getString("upload_time"));
            }

            request.setAttribute("uploadHistory",uploadHistory);
            request.setAttribute("fileInfo",fileInfo);
            request.setAttribute("fileInfoList", fileInfoList);
            RequestDispatcher rd = request.getRequestDispatcher("/UploadHistoryJsp");
            rd.forward(request, response);

这是我的jsp

<div class="panel-body">
                    <table id="uploadHistoryTable" class="table">
                        <thead>
                            <tr>
                            <th><strong>File Name</strong></th>
                            <th><strong>Date & Time</strong></th>
                            </tr>
                        </thead>

                        <tbody>

                            <c:forEach var="uploaded" items="${fileInfoList}">
                            <tr>

                                <td><a href="${pageContext.request.contextPath}/DownloadServlet?f=${uploaded.file_name}&p=${uploaded.username}">${uploaded.file_name}</a></td>
                                <td>${uploaded.upload_time}</td>
                            </tr>
                            </c:forEach>
                        </tbody>
                    </table>

                </div>
            </div>
        </div><!-- panel-body -->

请帮忙。如有任何混淆,请见谅。

【问题讨论】:

  • 您总是只更新FileInfo 的一个实例。只需将这一行 FileInfo fileInfo = new FileInfo(); 移动到 while 循环中,以便在将新对象添加到 map 之前添加一个新对象
  • @Arkantos 是对的……这就是解决方案。

标签: java jsp servlets


【解决方案1】:

while 循环内移动这一行:FileInfo fileInfo = new FileInfo();

while(rs.next()) {
FileInfo fileInfo = new FileInfo();
....

照原样,您只创建一个实例并不断更新。您很可能会多次看到您从数据库中提取的最后一个元素。

【讨论】:

    【解决方案2】:

    您一次又一次地添加相同的对象。您需要在while循环中启动FileInfo

      while(rs.next()) {
         FileInfo fileInfo= new FileInfo();
              .....
         fileInfoList.add(fileInfo)
      }
    

    【讨论】:

      【解决方案3】:

      您的代码的问题是您总是通过 fileInfo 变量更新 FileInfo 的单个实例,因此在每次迭代中您只是覆盖单个对象的状态。

         FileInfo fileInfo = new FileInfo();
         --------
          while(rs.next()) {
            // updating fileInfo from result set
         }
      

      FileInfo 移动到下面的 while 循环中

         while(rs.next()) {
            FileInfo fileInfo = new FileInfo();
            // update new fileInfo from result set and add to fileInfoList
         }
      

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 2014-01-14
        • 1970-01-01
        • 2016-08-10
        • 2015-06-22
        • 1970-01-01
        • 2023-03-04
        • 2019-08-08
        • 1970-01-01
        相关资源
        最近更新 更多