コード ```### 前提・実現したいこと データベースからデータを取得し、一覧で表示させたい ### 発生している問題・エラーメッセージ
Caused by: javax.el.PropertyNotFoundException: Property 'PublicationDate' not found on type jp.co.sss.book.bean.BookUser
上記エラーコードと共にログイン画面から一覧表示まで遷移しない
### 該当のソースコード ```DAO package jp.co.sss.book.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import jp.co.sss.book.bean.BookUser; /** * ユーザ情報テーブル用DAO * * @author system_shared */ public class BookUserDAO { /** * ユーザIDとパスワードが一致するユーザ情報を検索 * * @param userId * ユーザID * @param password * パスワード * @return ユーザ情報 * @throws SQLException * データベース操作失敗時に送出 */ public static BookUser findByUserIDAndPassword(String userId, String password) throws SQLException { BookUser bookUser = null; // データベースへ接続 Connection connection = DBManager.getConnection(); // SQLの準備 PreparedStatement preparedStatement = connection .prepareStatement("SELECT * FROM book_user WHERE book_user_id = ? AND password = ?"); preparedStatement.setString(1, userId); preparedStatement.setString(2, password); // SQLの実行 ResultSet rs = preparedStatement.executeQuery(); // 検索結果をJavaBeansに保存 if (rs.next()) { bookUser = new BookUser(); bookUser.setBookUserId(rs.getInt("book_user_id")); bookUser.setBookUserName(rs.getString("book_user_name")); bookUser.setPassword(rs.getString("password")); } // データベースとの接続を切断 DBManager.close(preparedStatement, connection); return bookUser; } public static List<BookUser> findAll() { Connection connection = null; PreparedStatement preparedStatement = null; List<BookUser> bookList = new ArrayList<BookUser>(); try { connection = DBManager.getConnection(); preparedStatement = connection.prepareStatement("SELECT * FROM book b INNER JOIN genre g ON b.genre_id = g.genre_id"); // SQLの実行 ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { // 書籍テーブルからデータの取得 BookUser bookUser = new BookUser(); bookUser.setBookId(rs.getInt("book_id")); bookUser.setBookName(rs.getString("book_name")); bookUser.setAuthor(rs.getString("author")); bookUser.setPublicationDate(rs.getDate("publication_date")); bookUser.setStock(rs.getInt("stock")); // ジャンルテーブルからデータを取得 BookUser book = new BookUser(); book.setGenreId(rs.getInt("genre_id")); book.setGenreName(rs.getString("genre_name")); bookList.add(bookUser); } }catch (SQLException e) { e.printStackTrace(); }finally { DBManager.close(preparedStatement,connection); } return bookList; } public static BookUser findById(String genreId) { Connection connection = null; PreparedStatement preparedStatement = null; BookUser genre = null; try { connection = DBManager.getConnection(); preparedStatement = connection.prepareStatement("SELECT * FROM genre WHERE genre_id = ?"); preparedStatement.setString(1, genreId); // SQLの実行 ResultSet rs = preparedStatement.executeQuery(); while (rs.next()) { genre = new BookUser(); genre.setGenreId(rs.getInt("genre_id")); genre.setGenreName(rs.getString("genrename")); } }catch (SQLException e) { e.printStackTrace(); }finally { DBManager.close(preparedStatement,connection); } return genre; } }
jsp
1<%@ page contentType="text/html; charset=UTF-8"%> 2<!DOCTYPE html> 3<html> 4<head> 5<meta charset="UTF-8"> 6<link href="css/style.css" rel="stylesheet" type="text/css" /> 7<title>ログイン画面</title> 8</head> 9<body> 10 <header> 11 <h3>書籍一覧システム</h3> 12 </header> 13 <div id="main"> 14 <p>ユーザーIDとパスワードを入力してください。</p> 15 <p class="error">${errMessage}</p> 16 <form action="<%=request.getContextPath()%>/login" method="post"> 17 ユーザーID:<input type="text" name="bookUserId"><br> 18 パスワード:<input type="password" name="password"><br> 19 <input type="submit" value="ログイン"> 20 </form> 21 </div> 22 <%@ include file="footer.jsp"%> 23</body> 24</html> 25
jsp
1<%@ page contentType="text/html; charset=UTF-8"%> 2<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<link href="css/style.css" rel="stylesheet" type="text/css" /> 8<title>ログイン画面</title> 9</head> 10<body> 11 <%@ include file="../header.jsp"%> 12 <div id="main"> 13 書籍一覧画面 14 15 <form action="" method="post"> 16 <div style="display: inline-flex"> 17 書籍名:<input type="text" name="bookName" /> <input type="submit" 18 value="検索" /> ジャンル名:<select> 19 <option value="文学">文学</option> 20 <option value="経済">経済</option> 21 </select> <input type="submit" value="検索" /> 22 </div> 23 </form> 24 25 <table> 26 <tr> 27 <th>書籍ID</th> 28 <th>書籍名</th> 29 <th>著者</th> 30 <th>発行日</th> 31 <th>在庫</th> 32 <th>ジャンル名</th> 33 </tr> 34 <c:forEach var="bookUser" items="${bookList}"> 35 <tr> 36 <td>${bookUser.bookId}</td> 37 <td>${bookUser.bookName}</td> 38 <td>${bookUser.author}</td> 39 <td>${bookUser.PublicationDate}</td> 40 <td>${bookUser.stock}</td> 41 <td>${bookUser.genre.genreId}</td> 42 43 </tr> 44 </c:forEach> 45 </table> 46 47 48 49 </div> 50 51 <%@ include file="../footer.jsp"%> 52</body> 53</html>
servlet
1package jp.co.sss.book.servlet; 2 3import java.util.List; 4 5import javax.servlet.annotation.WebServlet; 6import javax.servlet.http.HttpServlet; 7import javax.servlet.http.HttpServletRequest; 8import javax.servlet.http.HttpServletResponse; 9 10import jp.co.sss.book.bean.BookUser; 11import jp.co.sss.book.dao.BookUserDAO; 12 13/** 14 * ログイン用サーブレット 15 * 16 * @author system_shared 17 */ 18@WebServlet(urlPatterns = { "/login" }) 19public class Login extends HttpServlet { 20 public void doPost(HttpServletRequest request, HttpServletResponse response) { 21 // ログイン処理 22 try { 23 String bookUserId = request.getParameter("bookUserId"); 24 String password = request.getParameter("password"); 25 26 BookUser bookUser = BookUserDAO.findByUserIDAndPassword(bookUserId, password); 27 28 if (bookUser != null) { 29 List<BookUser> bookList = BookUserDAO.findAll(); 30 request.setAttribute("bookList", bookList); 31 // TODO 下記コードを、書籍一覧表示用のサーブレットにフォワードするように編集してください。 32 request.getRequestDispatcher("/select/list.jsp").forward(request, response); 33 } else { 34 request.setAttribute("errMessage", "ユーザID、またはパスワードが間違っています。"); 35 request.getRequestDispatcher("/index.jsp").forward(request, response); 36 } 37 38 } catch (Exception e) { 39 e.printStackTrace(); 40 } 41 42 } 43} 44 45
試したこと
DAO内のSELECT文はOracleで実行すると表示された。
一覧表示用のjspは、テーブル部分を削除すると表示された。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。