Сервлет отправляет неверную информацию в JSP - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать веб-проект Java, в котором перечислены исполнители, альбомы исполнителей и песни по альбомам.Проблема в том, что мои альбомы исполнителей отображаются правильно на странице браузера, но когда я пытаюсь составить список песен по альбомам, они смешиваются друг с другом.Например, в браузере, когда я нажимаю «Metallica», я получаю песни от Aerosmith heh.Ниже приведены мои файлы DAO, JSP и сервлетов, касающиеся песен.

TrackDAO:

public List<Track> findTracksByAlbum(Album album) throws SQLException, ClassNotFoundException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet result = null;
    List<Track> tracksByAlbum = new ArrayList<>();
    Track track = null;

        try {
            connection = new ChinookDatabase().connect();
            String sql = ("SELECT * FROM Track WHERE AlbumId = ?");
            statement = connection.prepareStatement(sql);
            statement.setLong(1, album.getId());
            result = statement.executeQuery();

            while(result.next()) {
                long id = result.getLong("TrackId");
                String name = result.getString("Name");
                tracksByAlbum.add(new Track(id, name));
            }
        }

        catch (SQLException e) {
            throw new RuntimeException(e);
        }
        finally {
            ChinookDatabase.closeQuietly(connection, statement, result);
        }
        return tracksByAlbum;
    }

JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Kappaleet</title>
</head>
<body>
<h1>Tässä kaikki kappaleet</h1>
<c:forEach items="${ tracks }" var="track">
<li>
<c:out value="${ track.getName() }" />
</li>
</c:forEach>
</body>
</html>

Сервлет:

@WebServlet("/Track")
public class TrackServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private AlbumDAO albumDao = new AlbumDAO();
private TrackDAO trackDao = new TrackDAO();

protected void doGet(HttpServletRequest request, HttpServletResponse 
response)

    throws ServletException, IOException {

        String stringId = request.getParameter("id");
        long id = Long.parseLong(stringId);
        List<Track> track = null;

        try {
            Album album = albumDao.findAlbum(id);
            track = trackDao.findTracksByAlbum(album);
        } catch (ClassNotFoundException | NumberFormatException | 
SQLException e) {
            e.printStackTrace();
        }

    request.setAttribute("tracks", track);
    String jsp = "/kappaleet.jsp";
    RequestDispatcher dispather = 
request.getServletContext().getRequestDispatcher(jsp);
    dispather.include(request, response);
}
}
...