前提・実現したいこと
JSP+postgresqlでJSP/Servletのアプリケーション作成を目指していますが
ブラウザでviewを表示し
配置されたセレクトボックス[SelVarCo_id]で施工者を選ぶ
↓
view上のlistの詳細レコードがその施工者に絞り込まれる
という部分で先に進めなくなりました。
セレクトボックスで選択したvalue値をDAOのSQLプリペアードステートメントのパラメーターで使うためには
どのようにmodel・controller・DAOのco_idに設定(値を渡して)すれば良いのかがわかりません。
セレクトボックスのvalueをSQLのWHEREのパラメーターに設定する方法がわからないのです。
該当のソースコード
View.jsp
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8" import="model.*,java.util.*"%> 3<% 4 List<Book> list = (List<Book>) request.getAttribute("list"); 5 Book book_model = (Book) request.getAttribute("book"); 6 7 String co_id = book_model == null ? "" : String.valueOf(book_model.getCo_id()); 8 String company = book_model == null ? "" : book_model.getCompany(); 9 10 String title = (String) request.getAttribute("title"); 11 title = title == null ? "登録してください。" : title; 12 String err = (String) request.getAttribute("err"); 13 String msg = (String) request.getAttribute("msg"); 14%> 15<%@ page import="java.sql.ResultSet"%> 16<%@ page import="java.sql.SQLException"%> 17<%@ page import="java.sql.Statement"%> 18<%@ page import="java.sql.Connection"%> 19<%@ page import="java.sql.DriverManager"%> 20<%@ page import="java.sql.PreparedStatement"%> 21<% 22 Connection SelCompanyDb = null; 23 PreparedStatement SelCompanyPs = null; 24 ResultSet SelCompanyRs = null; 25 Class.forName("org.postgresql.Driver"); 26 SelCompanyDb = DriverManager 27 .getConnection("jdbc:postgresql://localhost:5433/ncdb?user=fuga&password=hoge"); 28 29 String SelCompanySQL = "SELECT * FROM t_company ORDER BY co_id"; 30 SelCompanyPs = SelCompanyDb.prepareStatement(SelCompanySQL); 31 SelCompanyRs = SelCompanyPs.executeQuery(); 32%> 33<script 34 src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 35</script> 36<script language="JavaScript"> 37function setCo_id(txt) 38{ 39 document.book_form.co_id.value = txt; 40} 41 42$(function() { 43 $("#SelVarCo_id").change(function() { 44 // value値を取得 45 var str1 = $("#SelVarCo_id").val(); 46 //document.book_select.SelVarco_id.value = str1; 47 }); 48}); 49</script> 50 51<!DOCTYPE html> 52<html> 53<head> 54<meta charset="UTF-8" /> 55<meta name="viewport" 56 content="width=device-width, initial-scale=1, shrink-to-fit=no"> 57<meta http-equiv="Content-Script-Type" content="text/javascript"> 58 59<form name="book_select" action="/NcApl/book_main" method="post"> 60 61 // テスト用テキストボックス 62 <div class="form-group"> 63 <label for="co_id">施工者(テキストボックス):</label> 64 <input type="text" id="SelVarco_id" name="SelVarco_id" 65 class="form-control" style="width: 300px;" value="<%=co_id%>"> 66 </div> 67 68 // セレクトボックス 69 <td><div class="form-group"> 70 <label for="co_id">施工者:</label> <select id="SelVarCo_id" 71 name="company" class="form-control" style="width: 300px;"> 72 <% 73 while (SelVarCompanyRs.next()) { 74 %> 75 <option value="<%=SelVarCompanyRs.getString("co_id")%>"> 76 <%=SelVarCompanyRs.getString("company")%></option> 77 <% 78 } 79 %> 80 </select> 81 </div></td> 82</form> 83 84 <% 85 if (list != null && list.size() > 0) { 86 %> 87 <tr> 88 <th>施工者ID</th> 89 <th>施工者</th> 90 <th>編集</th> 91 </tr> 92 <% 93 for (Book p : list) { 94 %> 95 <tr> 96 <td><%=p.getCo_id()%></th> 97 <th><%=p.getCompany()%></th> 98 <td><a 99 href="/NcApl/book_main?action=update&co_id=<%=String.valueOf(p.getCo_id())%>" 100 class="btn btn-primary">更新</a> <a 101 href="/NcApl/book_main?action=delete&co_id=<%=String.valueOf(p.getCo_id())%>" 102 class="btn btn-danger" onclick="return confirm('削除してよろしいですか?');">削除</a> 103 104 </td> 105 </tr> 106 <% 107 } 108 %> 109 </table> 110 <% 111 } 112 %> 113 </div>
[controller.java]
java
1 2package controller; 3 4import java.io.IOException; 5import java.util.List; 6 7import javax.servlet.RequestDispatcher; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14import dao.BookDAO; 15import model.Book; 16 17@WebServlet("/book_main") 18public class Book_Main extends HttpServlet { 19 private static final long serialVersionUID = 1L; 20 21 @Override 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) 23 throws ServletException, IOException { 24 BookDAO dao = new BookDAO(); 25 String action = request.getParameter("action"); 26 if (action != null && action.equals("delete")) { 27 dao.deleteOne(Integer.parseInt(request.getParameter("co_id"))); 28 request.setAttribute("msg", "1件削除しました。"); 29 } else if (action != null && action.equals("update")) { 30 Book ParaB_id = dao 31 .findOne(Integer.parseInt(request.getParameter("co_id"))); 32 request.setAttribute("book", ParaCo_id); 33 request.setAttribute("title", "項目を編集してください。"); 34 } 35 List<Book> list = dao.findAll(); 36 request.setAttribute("list", list); 37 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/view/book_main.jsp"); 38 rd.forward(request, response); 39 } 40 41 @Override 42 protected void doPost(HttpServletRequest request, HttpServletResponse response) 43 throws ServletException, IOException { 44 request.setCharacterEncoding("UTF-8"); 45 String ParaCo_id = request.getParameter("co_id"); 46 String ParaCompany = request.getParameter("company"); 47 48 if (ParaCo_id.isEmpty()) { 49 request.setAttribute("err", "未記入の項目があります!"); 50 } else { 51 BookDAO dao = new BookDAO(); 52 String ParaCo_id = request.getParameter("co_id"); 53 54 if (ParaCo_id != null) { 55 dao.updateOne(new Book(Integer.parseInt(ParaCo_id), ParaCompany)); 56 request.setAttribute("msg", "1件更新しました。"); 57 } else { 58 dao.insertOne(new Book(Integer.parseInt(ParaCo_id),ParaCompany)); 59 request.setAttribute("msg", "1件登録しました。"); 60 } 61 } 62 doGet(request, response); 63 } 64}
[DAO.java]
java
1package dao; 2 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.util.ArrayList; 8import java.util.List; 9 10import javax.naming.Context; 11import javax.naming.InitialContext; 12import javax.naming.NamingException; 13import javax.sql.DataSource; 14 15import model.Book; 16 17public class BookDAO { 18 private Connection db; 19 private PreparedStatement ps; 20 private ResultSet rs; 21 22 private void getConnection() throws NamingException, SQLException { 23 Context context = new InitialContext(); 24 DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/jsp"); 25 this.db = ds.getConnection(); 26 } 27 28 private void disconnect() { 29 try { 30 if (rs != null) { 31 rs.close(); 32 } 33 if (ps != null) { 34 ps.close(); 35 } 36 if (db != null) { 37 db.close(); 38 } 39 } catch (SQLException e) { 40 e.printStackTrace(); 41 } 42 } 43 44public List<Book> findSelect(int co_id) { 45 46 List<Book> bookList = new ArrayList<>(); 47 try { 48 this.getConnection(); 49 50 ps = db.prepareStatement( 51 "SELECT co_id, company FROM t_company WHERE co_id=?;" 52 ); 53 ps.setInt(1, co_id); 54 rs = ps.executeQuery(); 55 while (rs.next()) { 56 int Co_id = rs.getInt("co_id"); 57 String Company = rs.getString("company"); 58 59 Book book = new Book( 60 Co_id, Company); 61 bookList.add(book); 62 } 63 } catch (SQLException e) { 64 e.printStackTrace(); 65 } catch (NamingException e) { 66 e.printStackTrace(); 67 } finally { 68 this.disconnect(); 69 } 70 return bookList; 71} 72
[model.java]
java
1package model; 2 3import java.io.Serializable; 4 5public class Book implements Serializable { 6 private int co_id; 7 private String company; 8 9 public Book() { 10 } 11 12 public Book( 13 int co_id, String company 14 ) { 15 this.co_id = co_id; 16 this.company = company; 17 } 18 19 public Book( 20 int co_id, String company 21 ) { 22 this(company); 23 this.co_id = co_id; 24 } 25 26 // 施工者ID 27 public int getCo_id() { 28 return co_id; 29 } 30 31 public void setCo_id(int co_id) { 32 this.co_id = co_id; 33 } 34 35 // 施工者 36 public String getCompany() { 37 return company; 38 } 39 40 public void setCompany(String company) { 41 this.company = company; 42 } 43}
試したこと
テスト用テキストボックスを設置して、セレクトボックス選択時にvalue値が送信出来ている?ことを
テスト用テキストボックスにvalue値がセット(設定される)ことで確認しました。
補足情報(FW/ツールのバージョンなど)
IDE:eclipse 2019-06 (windows 10)
DB:postgresql 11 (windows 10)
java server:tomcat9(Java11) (eclipse)
あなたの回答
tips
プレビュー