如何访问List<>使用c:forEach?

时间:2011-06-23 14:28:20

标签: jsp arraylist jstl el

在我生成List的第一个servlet中,如下所示

List<Image> imageId = imageDAO.listNames(image);

request.setAttribute("imageId", imageId);

//Redirect it to home page
request.getRequestDispatcher("/webplugin/jsp/profile/photos.jsp").forward(request, response);

imageId

的帮助下获取要在JSP中显示的c:forEach列表
<c:forEach items="${imageId}" var="image">
    <img src="Photos/${image.photoid}">
</c:forEach>

我有一个Image bean类,其中有photoid作为其属性

在第二个servlet中映射到Photos url-pattern我带上每张照片。

问题:

  1. 我在相同的时间内迭代相同的图像,这等于imageId列表中的项目数。假设imageId在其List中有五个imageid,那么相同的图像在我的JSP中显示五次。如何从中查找每个id
  2. 编辑:这是我的imageDAO.listNames()方法来获取photoid在检索图像并将其放入List<Image>

    时出现问题
    public List<Image> listNames(Image image) throws IllegalArgumentException, SQLException, ClassNotFoundException {
    
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultset = null;
        Database database = new Database();
        List<Image> list = new ArrayList<Image>();
    
        try {
    
            connection = database.openConnection();
            preparedStatement = connection.prepareStatement(SQL_GET_PHOTOID);                  
            preparedStatement.setLong(1, image.getUserid());
            resultset = preparedStatement.executeQuery();
    
            while(resultset.next()) {
                image.setPhotoid(resultset.getString(1));
                list.add(image);
            }
    
        } catch (SQLException e) {
            throw new SQLException(e);
        } finally {
            close(connection, preparedStatement, resultset);
        }
        return list;
    }
    

1 个答案:

答案 0 :(得分:1)

当您遍历结果集时,您一遍又一遍地设置相同图像对象的照片ID ...然后多次将同一对象重新插入列表。

更新:简单地说,您在该方法中的逻辑模型存在缺陷。您不需要image参数。像这样的东西应该工作(重点是在每次迭代中创建一个新的Image对象):

List<Image> list = new ArrayList<Image>();
try {
    ...
    while(resultset.next()) {
        Image image = new Image ();
        image.setPhotoid(resultset.getString(1));
        list.add(image);

然后你的列表将有几个不同的对象。