質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

0回答

2856閲覧

jsp上のセレクトボックスで選択した値をWHEREにセットしjspで更新表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/10/23 01:42

編集2019/10/24 02:01

前提・実現したいこと

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetutetu

2019/10/24 02:44

まず、使用していない部分、明らかに記述に誤りがある部分をカットすることから始めてはいかがでしょうか。 ぱっと見でどこに問題が発生しているか探すのに非常に苦労します。 (恐らく質問者様が自身の書いたものを見直しても同様かと)
退会済みユーザー

退会済みユーザー

2019/10/24 02:51

ご指摘ありがとうございます。ただ、私のような初心者には「使用していない部分、明らかに記述に誤りがある部分」というのがどこを指しているのかすらわかっておらず、というかそういう部分が無いと思って質問に掲載させていただいたつもりなのですが...
tetutetu

2019/10/24 04:19

極論なのですが >セレクトボックスのvalueをSQLのWHEREのパラメーターに設定する方法がわからないのです。 という問題を解決するためには jsp側でセレクトボックスの要素を選択し、submitする ↓ サーブレットで受け取って(必要なら適切なデータ型に変換して)DAOに渡す ↓ DAOでpreparedStatementにセットする で終了です。 上記の流れが適切に記載されているか(というかされてないので確認してみてください。)だけあれば正直十分です。 >明らかに記述に誤りがある部分 いくつかあったような気がしますが とりあえずサーブレット内の「ParaCo_id」変数に注目してみてください。 定義前に使ってたり、二重に定義したり やりたい放題になってます。
tetutetu

2019/10/24 04:24

>テスト用テキストボックスを設置して、セレクトボックス選択時にvalue値が送信出来ている?ことを ちなみに多分詰まってるのはここです。 あくまでjsp内でセレクトボックスに選択した値が「同じjsp内の」テキストボックスに表示できているだけで 他の場所(サーブレット)に送信はできていないです。
退会済みユーザー

退会済みユーザー

2019/10/24 04:38

まさに、javascriptで送信してテスト用テキストボックスに表示できていたので、それをサーブレットに送受信出来れば可能と思っての質問でした。 では、それを「セレクトボックスの選択時イベント」で送信するには <select onChange="setCo_id(this[this.selectedIndex].value)"のような形で送信するのでしょうか? それとも<a href="/NcApl/book_main?action=select&co_id=<%=co_id%>"のような形で送信するのでしょうか?後者だとsubmitする方法がわかりませんが...あくまで[送信]ボタンでsubmitが必要でしょうか?
tetutetu

2019/10/24 04:53

javascript submit 等で検索してみてください。 どのようなアクションを起こした際にsubmitするようにするかは、質問者様次第になるかなと。
退会済みユーザー

退会済みユーザー

2019/10/24 04:56

貴重なお時間を割いていただきありがとうございます。ご指導の通り検索してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問