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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

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

Q&A

解決済

1回答

3407閲覧

【Java】JSP・サーブレットでの値渡しがうまくできない

ysda

総合スコア65

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JSP

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

servlet

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

0グッド

0クリップ

投稿2020/08/31 07:27

編集2020/08/31 07:58

前提・実現したいこと

現在JSP・サーブレットを使用してブラウザ上からDBの操作をできるプログラムを作成しております。
その際にうまく値渡しができておらず、こちらの原因や解決方法につきましてご教示いただけますと幸いです。

発生している問題・エラーメッセージ

DBのテーブルとして従業員テーブル(EMPLOYEE)・部署テーブル(DEPARTMENT)が存在し、各カラムは以下のようになっております。

部署テーブル

部署ID部署名
主キー

従業員テーブル
|社員ID|社員名|社員名カナ|メールアドレス|パスワード|部署ID|
|:--|:--:|--:|
|主キー|||||部署テーブルの外部キー|

従業員テーブル操作画面にて検索を行う際に、部署テーブルから部署IDを取得して、条件検索用の検索バーに部署IDをOPTIONで選択できるようにしたいと考えているのですが、その取得がうまくできないという状態になっております。

↓実現したい状態
イメージ説明

↓実際の状態。単純なテキスト入力欄になっている
イメージ説明

該当のソースコード

EmpPreSearchServlet.java

package servlet; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EmpPreSearchServlet extends HttpServlet{ Connection conn = null; PreparedStatement ps = null; ResultSet result = null; String user = "suser"; String password = "spass"; String url = "jdbc:mysql://localhost:3306/shaindb?autoReconnect=true&useSSL=false"; protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ req.setCharacterEncoding("UTF-8"); try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, user, password); String sql = "select * from department"; ps = conn.prepareStatement(sql); ps.execute(); result = ps.executeQuery(); req.setAttribute("emp_preResult", result); //サーブレット上で値が取れているかの確認用→こちらは問題なし while(result.next()) { System.out.println(result.getString(1)); System.out.println(result.getString(2)); } //確認ここまで req.getRequestDispatcher("emp_search.jsp").forward(req, res); } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { System.out.println("MySQLのクローズに失敗しました。"); } } } }

emp_home.jsp

<!-- 省略 --> <div class="mode-all-buttons"> <div class="mode-buttons"> <div class="mode-button"> <form action="empPreSearchResult" method="post">//ここからemp_search.jspに飛んだ時に、 <input type="submit" class="btn btn-primary btn-lg" value="検索"> </form> </div> <div class="mode-button"> <button type="button" class="btn btn-primary btn-lg" onclick="location.href='emp_add.jsp'" >登録</button> </div> <div class="mode-button"> <button type="button" class="btn btn-primary btn-lg" onclick="location.href='emp_update.jsp'">更新</button> </div> <div class="mode-button"> <button type="button" class="btn btn-primary btn-lg" onclick="location.href='emp_delete.jsp'" >削除</button> </div> </div> </div> <!-- 省略 -->

emp_search.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.sql.*"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="stylesheet" href="css/common.css"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <title>社員検索</title> </head> <body> <jsp:include page="template/header.jsp"/> <div class="container"> <h2>社員検索</h2> <div class="input-form"> <form action="empSearchResult" method="post"> <table class="input-form-table"> <tr> <td>社員ID</td> <td><input type="text" name="id_emp" maxlength='10' placeholder="社員ID(半角数字)"></td> </tr> <tr> <td>社員名</td> <td><input type="text" name="name" maxlength='50' placeholder="社員名"></td> </tr> <tr> <td>社員名カナ</td> <td><input type="text" name="kn_name" maxlength='50' placeholder="社員名のカタカナ(全角カナ)"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="mail" maxlength='100' placeholder="メールアドレス"></td> </tr> <tr> <td>パスワード</td> <td><input type="text" name="pass" maxlength='15' placeholder="パスワード(半角英数字)"></td> </tr> <tr> <% ResultSet preResult = (ResultSet)request.getAttribute("emp_preResult"); %> <td>部署</td> <td> <input type="text" name="id_dept" list="dept" maxlength='10' placeholder="部署ID(半角数字)" autocomplete="off">                 <datalist id="dept"> <% if(preResult != null){ %> <% while(preResult.next()) { %> <option value="<%=preResult.getString(1) %>"><%=preResult.getString(2) %> <%} %> <%} %> </datalist> </td> </tr> </table> <div class="submit-button text-center"> <input type="hidden" value="search" name="searchMode"> <input type="submit" value="検索" > </div> </form> </div> <!-- JSP上でサーブレットから渡された値が取得できているかの確認用→値が取得できていない --> <% if(preResult != null){ %> <table class="table search-result-table"> <thead> <tr> <th>部署ID</th> <th>部署名</th> </tr> </thead> <% while(preResult.next()) {%> <tr> <td><%=preResult.getString(1)%></td> <td><%=preResult.getString(2)%></td> </tr> <%} %> </table> <%} %> <!-- 確認ここまで --> <% ResultSet result = (ResultSet)request.getAttribute("emp_result"); %> <% if(result != null){ %> <table class="table search-result-table"> <thead> <tr> <th>社員ID</th> <th>社員名</th> <th>社員名カナ</th> <th>メールアドレス</th> <th>パスワード</th> <th>部署ID</th> </tr> </thead> <% while(result.next()) {%> <tr> <td><%=result.getString(1)%></td> <td><%=result.getString(2)%></td> <td><%=result.getString(3)%></td> <td><%=result.getString(4)%></td> <td><%=result.getString(5)%></td> <td><%=result.getString(6)%></td> </tr> <%} %> </table> <%} %> </div> </body> </html>

試したこと

まずサーブレット上で値が取得できているかの確認をしました。

EmpPreSearchServlet.java

while(result.next()) { System.out.println(result.getString(1));//部署ID System.out.println(result.getString(2));//部署名 }

こちらは想定通り、コンソール上に部署IDと部署名が表示されました。

続いて、JSPで出力できるかどうかの確認をしました。

    <% if(preResult != null){ %> <table class="table search-result-table"> <thead> <tr> <th>部署ID</th> <th>部署名</th> </tr> </thead> <% while(preResult.next()) {%> <tr> <td><%=preResult.getString(1)%></td> <td><%=preResult.getString(2)%></td> </tr> <%} %> </table> <%} %>

こちらについては、tdには何も表示されないという状態でした。
そのため、値渡しができていないことまでは理解できているのですが、フォームを使った検索機能については同様のロジックではあるものの、正常に値渡しができているため、原因がわからない状態になっております。

長文申し訳ございませんが、ご教示いただけますと幸いです。

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

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

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

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

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

m.ts10806

2020/08/31 07:52

プルダウンにしたいならinputではなくselectでは。
ysda

2020/08/31 08:01 編集

コメントありがとうございます。 datalistにて実装したいため、inputタグを使用しています。 ただいま確認しましたら、<datalist id="dept">の部分が抜けていたため、追記いたしました。
guest

回答1

0

自己解決

サーブレット内にテスト用に記載していました以下のコードを削除したところ、取得できるようになりました。

while(result.next()) { System.out.println(result.getString(1));//部署ID System.out.println(result.getString(2));//部署名 }

なぜこうなるのか…というのは理解できなかったのですが、ひとまずこちらで解決いたしました。

投稿2020/08/31 08:42

ysda

総合スコア65

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問