前提・実現したいこと
フォームで入力した情報をもとにSQLでデータを取得し、一覧表としてweb上に表示する検索機能を作成しています。以前の質問にいただいた回答をもとに改良を加えてみました。デバッグで確認したところ、フォームで入力した値を受け取り、SQL文で実行するところまではできているみたいなのですが、取得した情報がページで表示されずに困っています。
java
1__作成したBeans__ 2public User(String loginid,String name,String birthdate) { 3 this.loginid=loginid; 4 this.name=name; 5 this.birthdate=birthdate; 6 } 7__以下、アクセサのため省略__
java
1__作成したDAO__ 2public User searchUser(String loginid,String name,String birthdatestart,String birthdateend) { 3 Connection conn=null; 4 try { 5 conn = DBManager.getConnection(); 6 7 8 String sql = "SELECT * FROM user WHERE login_id<>'admin'"; 9 __以下、各フォームが空欄でない場合、SOL文に条件を付与していく__ 10 if(!loginid.equals("")) { 11 sql += " AND login_id = '" + loginid + "'"; 12 } 13 14 if(!name.equals("")) { 15 sql += " AND name LIKE '%" + name + "%'"; 16 } 17 18 if(!birthdatestart.equals("")) { 19 sql += " AND birth_date<'" + birthdatestart + "'"; 20 } 21 22 if(!birthdateend.equals("")) { 23 sql += " AND birth_date>'" + birthdateend + "'"; 24 } 25 26 27 28 29 Statement stmt = conn.createStatement(); 30 ResultSet rs = stmt.executeQuery(sql); 31 32 if (!rs.next()) { 33 return null; 34 } 35 String loginIdData = rs.getString("login_id"); 36 String nameData = rs.getString("name"); 37 String birthDate = rs.getString("birth_date"); 38 39 40 return new User(loginIdData,nameData,birthDate); 41 }catch (SQLException e) { 42 e.printStackTrace(); 43 return null; 44 }finally { 45 if (conn != null) { 46 try { 47 conn.close(); 48 } catch (SQLException e) { 49 e.printStackTrace(); 50 return null; 51 } 52 } 53 } 54 55 }
java
1__サーブレットのdoPostメソッド__ 2protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 3 request.setCharacterEncoding("UTF-8"); 4 5 String loginid=request.getParameter("loginid"); 6 String name=request.getParameter("user-name"); 7 String birthdateStart=request.getParameter("date-start"); 8 String birthdateEnd=request.getParameter("date-end"); 9 10 __パラメータの入力項目を引数に渡し、DAOのメソッドを実行__ 11 UserDao userDao=new UserDao(); 12 User user=userDao.searchUser(loginid, name, birthdateStart,birthdateEnd); 13 14 __スコープに情報をセット__ 15 request.setAttribute("user", user); 16 **⬆️デバッグするとここがnullになってしまいます** 17 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userList.jsp"); 18 dispatcher.forward(request, response); 19 20 21 22 23 }
HTML
1__JSPファイル__ 2 <div class=table-responsive> 3 <table class="table table-striped"> 4 <table class="table table-bordered"> 5 <thead class="thead-light"> 6 <tr> 7 <th>ログインID</th> 8 <th>ユーザ名</th> 9 <th>生年月日</th> 10 <th></th> 11 </tr> 12 </thead> 13 14 <tbody> 15 __データベースに登録している全てのユーザーの情報を表示__ 16 <c:forEach var="userlist" items="${requestScope.userList}" > 17 __検索して取得したユーザーの情報を表示__ 18 <c:forEach var="userlist" items="${requestScope.user}" > 19 20 21 22 <tr> 23 24 <td>${userlist.loginid}</td> 25 <td>${userlist.name}</td> 26 <td>${userlist.birthdate}</td> 27 28 <td>${user.loginid}</td> 29 <td>${user.name}</td> 30 <td>${user.birthdate}</td> 31 32 33 34 35 36 37 38 </tr> 39 </c:forEach> 40 </c:forEach> 41 42 43 44 </tbody> 45 </table> 46 </table> 47 48 </div>
デバッグした結果nullになってしまう部分とjspファイル内のEL式の書き方あたりがうまくできていない気がします。
お力をお貸しいただきたいです。よろしくお願いします。