前提・実現したいこと
データベースとサーブレットを連携させて、ユーザー検索機能を備えたユーザー一覧表を作成しています。
はじめにページにアクセスすると、データベースに登録されている全てのユーザーのID、名前、生年月日の一覧表が表示されます。
検索機能では以下の項目でデータベースに登録されているユーザーを検索し、一覧表に表示させたいです。
・ID(完全一致)
・名前(部分一致)
・生年月日(指定した開始日と終了日の範囲内の日付にあたるもの)
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
java
1__beansを作成__ 2public class User implements Serializable { 3 private String id; 4 private String loginid; 5 private String name; 6 private String birthdate; 7 private String password; 8 private String createdate; 9 private String updatedate; 10public User(String loginid,String name,String birthdate1,String birthdate2) { 11 this.loginid=loginid; 12 this.name=name; 13 this.birthdate=birthdate1; 14 this.birthdate=birthdate2; 15 } 16__以下、アクセサのため省略__
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 String sql="SELECT * FROM user WHERE login_id = ? and name LIKE %?% and WHERE birth_date >=? AND <?"; 8 9 PreparedStatement pStmt = conn.prepareStatement(sql); 10 11 pStmt.setString(1, loginid); 12 pStmt.setString(2, name); 13 pStmt.setString(3, birthdatestart); 14 pStmt.setString(4, birthdateend); 15 16 ResultSet rs = pStmt.executeQuery(); 17 18 if (!rs.next()) { 19 return null; 20 } 21 String loginIdData = rs.getString("login_id"); 22 String nameData = rs.getString("name"); 23 String birthdateStart = rs.getString("birth_date"); 24 String birthdateEnd = rs.getString("birth_date"); 25 26 return new User(loginIdData,nameData,birthdateStart,birthdateEnd); 27 }catch (SQLException e) { 28 e.printStackTrace(); 29 return null; 30 }finally { 31 if (conn != null) { 32 try { 33 conn.close(); 34 } catch (SQLException e) { 35 e.printStackTrace(); 36 return null; 37 } 38 } 39 } 40 41 }
HTML
1__userList.jsp内で検索フォームを作成__ 2<form method="post" action="UserListServlet"> 3 <div class="input-loginid row"> 4 <label for="loginid" class="col-sm-3 col-form-label">ログインID</label> 5 <input type="text" name="loginid" class="form1 form-control"> 6 </div> 7 8 <div class="input-user-name row"> 9 <label for="user-name" class="col-sm-3 col-form-label">ユーザ名</label> 10 <input type="text" name="user-name" class="form2 form-control"> 11 </div> 12 13 14 <div class="input-birth-date row"> 15 <label for="birth-date" class="row col-sm-3 col-form-label">生年月日</label> 16 <div class="row col-sm-9"> 17 <div class="col-sm-5"> 18 <input type="date" name="date-start" id="date-start" class="form-control"/> 19 </div> 20 21 <div class="col-sm-1 text-center"> 22 〜 23 </div> 24 25 <div class="col-sm-5"> 26 <input type="date" name="date-end" id="date-end" class="form-control"/> 27 </div> 28 </div> 29 </div> 30 31 32 <div class="text-right"> 33 <button type="submit" value="検索">検索</button> 34 </div> 35 36 37 </form> 38 39__userList.jsp内で一覧表を作成__ 40<div class=table-responsive> 41 <table class="table table-striped"> 42 <table class="table table-bordered"> 43 <thead class="thead-light"> 44 <tr> 45 <th>ログインID</th> 46 <th>ユーザ名</th> 47 <th>生年月日</th> 48 <th></th> 49 </tr> 50 </thead> 51 52 <tbody> 53 <c:forEach var="userlist" items="${requestScope.userList}" > 54 <c:forEach var="user" items="${requestScope.user}" > 55 56 <tr> 57 58 <td>${userlist.loginid}</td> 59 <td>${userlist.name}</td> 60 <td>${userlist.birthdate}</td> 61 **①全てのユーザーの情報を表示** 62 63 <td>${user.loginid}</td> 64 <td>${user.name}</td> 65 <td>${user.birthdate}</td> 66 **②検索結果の表示** 67 68 69 <td> 70 <a class="btn btn-primary" href="userDetail.html">詳細</a> 71 <a class="btn btn-success" href="userUpdate.html">更新</a> 72 <a class="btn btn-danger" href ="userDelete.html">削除</a> 73 </td> 74 </tr> 75 </c:forEach> 76 </c:forEach> 77 78 </tbody> 79 </table> 80 </table> 81 82 </div>
java
1__UserListServletで全ユーザー情報の取得、および検索処理の実行__ 2protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 3 // TODO Auto-generated method stub 4 UserDao userDao = new UserDao(); 5 List<User> userList = userDao.findAll(); 6 7 request.setAttribute("userList", userList); 8 9 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userList.jsp"); 10 dispatcher.forward(request, response); 11 } 12 13protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 request.setCharacterEncoding("UTF-8"); 15 16 String loginid=request.getParameter("loginid"); 17 String name=request.getParameter("user-name"); 18 String birthdateStart=request.getParameter("date-start"); 19 String birthdateEnd=request.getParameter("date-end"); 20 21 UserDao userDao=new UserDao(); 22 User user=userDao.searchUser(loginid, name, birthdateStart, birthdateEnd); 23 24 request.setAttribute("user", user); 25}
試したこと
JSPファイル内の①だけ書くと全てのデータの情報が表示されます。②を書き加えると①の情報も含め、データの情報が表示されなくなってしまいます。
それとEL式の{user.birthdate}に該当するものがないのは把握できているのですが、どのように生年月日を出力すれば良いのか思いつきません。
初学者であるため、質問の仕方や説明に不十分な点があるかもしれません。すみません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。