Как получить доступ к списку <> с помощью c: forEach? - PullRequest
0 голосов
/ 23 июня 2011

В моем 1-м сервлете, где я генерирую Список, выглядит следующим образом

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>

У меня есть класс bean-компонента Image, свойства которого - photoid

во втором сервлете, который отображается на Photos шаблон URL, который я привожу на каждую фотографию.

Проблема:

  1. Я получаю одно и то же изображение, повторяющееся не раз, что равно количеству элементов в списке imageId. Предположим, у imageId есть пять imageid в своем Списке, тогда одно и то же изображение отображается в моем JSP пять раз. Как получить каждый id от него?

РЕДАКТИРОВАТЬ: Это мой метод 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 Ответ

1 голос
/ 23 июня 2011

Когда вы повторяете набор результатов, вы устанавливаете идентификатор фотографии для одного и того же объекта изображения снова и снова ... и затем повторно вставляете один и тот же объект в список несколько раз.

Обновление: Проще говоря, ваша логическая модель в этом методе ошибочна.Вам не нужен параметр изображения.Примерно так должно работать (акцент делается на создании нового объекта Image в каждой итерации):

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

, и тогда в вашем списке будет несколько отдельных объектов.

...