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

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

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

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

Java

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

Q&A

解決済

1回答

820閲覧

社員を登録する際にエラーが起きてしまいます

Ryo1504

総合スコア8

JSP

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

Java

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

0グッド

1クリップ

投稿2019/07/28 01:03

前提・実現したいこと

私は、JSPとサーブレットで社員を登録するシステムを作っています。
社員登録確認画面まではいくのですが、社員完了画面にいく際に、500エラーが発生してしまいます。
コンソールで原因を調べてみると、DAOのps.setString(7, employee.getDepartment().getDeptId());
というコードでエラーが出ていました。
実現したいことは、社員完了画面までいって社員登録ができていることと、パスワードの表示を・・・・という表示にしたいです。

該当のソースコード

JSP
ソースコード
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>社員登録</title> </head> <body> <h3>社員登録確認画面</h3> <div class="update"> <div class="form"> <div class="label">パスワード:</div> <div class="input">${employee.empPass}</div> </div> <div class="form"> <div class="label">社員名:</div> <div class="input">${employee.empName}</div> </div> <div class="form"> <div class="label">性別:</div> <div class="input"><c:choose><c:when test="${employee.gender==1}">男性</c:when> <c:when test="${employee.gender==2}">女性</c:when> <c:otherwise> ? </c:otherwise></c:choose></div> </div> <div class="form"> <div class="label">住所:</div> <div class="input">${employee.address}</div> </div> <div class="form"> <div class="label">生年月日:</div> <div class="input">${employee.birthday}</div> </div> <div class="form"> <div class="label">権限:</div> <div class="input"><c:choose><c:when test="${employee.authority==1}">一般</c:when> <c:when test="${employee.authority==2}">管理者</c:when> <c:otherwise> ? </c:otherwise></c:choose></div> </div> <div class="form"> <div class="label">部署名:</div> <div class="input">${employee.department.deptName}</div> </div> <form action="<%=request.getContextPath()%>/Insert" method="post"> <div class="form"> <div class="label"></div> <div class="input"> <input type="hidden" name="empPass" value="${employee.empPass}" /> <input type="hidden" name="empName" value="${employee.empName}" /> <input type="hidden" name="gender" value="${employee.gender}" /> <input type="hidden" name="address" value="${employee.address}" /> <input type="hidden" name="birthday" value="${employee.birthday}" /> <input type="hidden" name="authority"value="${employee.authority}" /> <input type="hidden" name="deptName" value="${department.deptId}" /> <input type="submit" value="登録" /> </div> </div> </form> <form action="/servlet_crud/jsp/sample01/regist_input.jsp"> <div class="form"> <div class="label"></div> <div class="input"> <input type="submit" value="戻る" /> </div> </div> </form> </div> </div> </body> </html>

サーブレット
ソースコード
package jp.co.sss.servlet.regist;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.sss.crud.bean.Department;
import jp.co.sss.crud.bean.Employee;
import jp.co.sss.crud.db.DepartmentDAO;
import jp.co.sss.crud.db.EmployeeDAO;

@WebServlet("/Insert")
public class Insert extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String empPass = request.getParameter("empPass"); String empName = request.getParameter("empName"); String gender = request.getParameter("gender"); String address = request.getParameter("address"); String birthday = request.getParameter("birthday"); String authority = request.getParameter("authority"); String deptId = request.getParameter("deptId"); Department department = null; try { department = DepartmentDAO.findByDepartment(deptId); } catch (SQLException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } Employee employee = new Employee(); employee.setEmpPass(empPass); employee.setEmpName(empName); employee.setGender(gender); employee.setAddress(address); employee.setBirthday(birthday); employee.setAuthority(authority); employee.setDepartment(department); EmployeeDAO.insert(employee); request.getRequestDispatcher("/jsp/sample01/regist_complete.jsp").forward(request, response); }

}

DAO
ソースコード

package jp.co.sss.crud.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import jp.co.sss.crud.bean.Department;
import jp.co.sss.crud.bean.Employee;

public class EmployeeDAO {

/** * 社員を登録 * * @return 社員登録 * @throws SQLException * データベース操作失敗時に送出 */ public static void insert(Employee employee) { Connection con = null; PreparedStatement ps = null; try { con = DBManager.getConnection(); ps = con.prepareStatement("INSERT INTO EMPLOYEE(EMP_PASS,EMP_NAME," + "GENDER,ADDRESS,BIRTHDAY,AUTHORITY,DEPT_ID)VALUES(?, ?, ?, ?, ?, ?, ?)"); ps.setString(1, employee.getEmpPass()); ps.setString(2, employee.getEmpName()); ps.setString(3, employee.getGender()); ps.setString(4, employee.getAddress()); ps.setString(5, employee.getBirthday()); ps.setString(6, employee.getAuthority()); ps.setString(7, employee.getDepartment().getDeptId()); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { DBManager.close(ps, con); } }

}

試したこと

ps.setString(7, employee.getDepartment().getDeptId());のコードを消すと社員完了画面まではいくのですが、社員登録はされませんでした。
また、パスワードの表示もどうしたら・・・・という表示にできるのか分からず、2日間考えたり調べたりしたのですが、解決できなかったので、アドバイス等頂けると大変助かります。
ソースコードが多く、大変ご迷惑だと思いますが、宜しくお願い致します。

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

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

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

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

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

y_waiwai

2019/07/28 01:14

エラーメッセージを提示しましょう
guest

回答1

0

ベストアンサー

java

1try { 2 department = DepartmentDAO.findByDepartment(deptId); 3} catch (SQLException e) { 4 // TODO 自動生成された catch ブロック 5 e.printStackTrace(); 6}

の部分でエラーが出ている場合、スタックトレースをコンソールに出すだけでそのまま処理が継続してしまうので、まずはdepartmentが取得できているときのみ後続処理をするようにしなければ、次の登録処理でもまたエラーが出てしまうでしょう。

サーブレットで実装されているなら少なくとも、

java

1try { 2 department = DepartmentDAO.findByDepartment(deptId); 3} catch (SQLException e) { 4 throw new ServletException(e); 5}

で処理中断をします。

投稿2019/07/28 01:55

A-pZ

総合スコア12011

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

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

Ryo1504

2019/07/28 03:38

アドバイスを頂き、ありがとうございます。 参考にさせて頂きます。 あと、パスワードの表示なのですが、${employee.empPass}で受け取った値を黒丸の●●●●という表示にするにはどうしたらよいでしょうか? 自分で調べてみたのですが、なかなか上手くいきませんでした。
A-pZ

2019/07/29 10:06

empPass をそのまま表示するのではなく、表示したくないのであれば、文字列を置き換えればよいでしょう。パスワードの文字列を自動的に別の文字へ置き換えるのは、<input type="password">の項目に対してブラウザが変換しているだけですので、passwordの要素を使わないのであれば自分で実装します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問