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

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

ただいまの
回答率

89.52%

jspで表示させたい値と、取得した値がずれている

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,099

nyan_engineer

score 28

表題について質問があります。
社員データの管理システムを、MVCモデルを利用して作成しております。

以下の流れで社員データの詳細画面を表示させたいのですが、
表示させたときに各項目で表示させたい値と取得してきた値にずれが生じております。
(生年月日の欄にメールアドレスが表示されているetc)

①list.jspでデータの一覧を表示
②「詳細」リンクを押し、EmployeeControlServletにて詳細画面へ遷移する処理を実行
③EmployeeListDAOにてデータベースより値を取得
③detail.jspで詳細画面を表示

コードは以下となります。
なぜ表示がずれてしまうのか、ご教授いただければ幸いです。

public class EmployeeListDAO {

    //定数宣言
    private final String useSSL = "";
    private final String userName = "";
    private final String password = "";
    private final String jdbcDriver = "";

    public EmployeeInfo employeeGet(String employee_id) throws Exception{

        EmployeeInfo employeeInfo = null;
        Connection conn = null;
        PreparedStatement pStmt = null;
        ResultSet rs = null;
        int employeeId ;

        try {
            //社員IDをint型へ変換
            employeeId = Integer.parseInt(employee_id);
            //JDBCドライバを読み込む
            Class.forName(jdbcDriver);
            //データベース接続
            conn = DriverManager.getConnection(useSSL,userName,password);
            //SELECT文を準備
            String sql = "SELECT E1.EMPLOYEE_ID,E1.NAME,E1.NAME_HIRAGANA,E1.BIRTHDAY,E1.SEX,E1.MAIL_ADDRESS,E1.TELEPHONE_NUMBER,E1.COMPANY_INFO_ID,E1.BUSINESS_MANAGER,E1.DEPARTMENT,E1.COMMISSIONING_STATUS,E2.ENTER_DATE,E2.RETIRE_DATE,E2.STATUS " +
                    "FROM EMPLOYEE_INFO AS E1 " +
                    "INNER JOIN EMPLOYEE_STATE AS E2 " +
                    "ON E1.EMPLOYEE_ID = E2.EMPLOYEE_INFO_ID " +
                    "WHERE E1.EMPLOYEE_ID = ?;";

            //SQLを設定
            pStmt = conn.prepareStatement(sql);

            //パラメータをセット
            pStmt.setInt(1,employeeId);

            //SELECT文を実行し、結果表を取得
            rs = pStmt.executeQuery();

            //取り出したデータをemployeeListに設置
            if(rs.next()) {

                //結果表からデータを取得
                String name = rs.getString("NAME");
                String name_hiragana = rs.getString("NAME_HIRAGANA");
                String sex = rs.getString("SEX");
                String mail_address = rs.getString("MAIL_ADDRESS");
                String business_manager = rs.getString("BUSINESS_MANAGER");
                String telephone_number = rs.getString("TELEPHONE_NUMBER");
                String birthday = rs.getString("BIRTHDAY");
                String enter_date = rs.getString("ENTER_DATE");
                String retire_date = rs.getString("RETIRE_DATE");
                String company_info_id = rs.getString("COMPANY_INFO_ID");
                String department = rs.getString("DEPARTMENT");
                String commissioning_status = rs.getString("COMMISSIONING_STATUS");
                String status = rs.getString("STATUS");

                employeeInfo = new EmployeeInfo(employeeId,name,name_hiragana,sex,mail_address,business_manager,telephone_number,birthday,enter_date,retire_date,company_info_id,department,commissioning_status,status);
            }
            else {
                throw new Exception("社員IDが見つかりませんでした:"+ employeeId);
            }
        }finally {
            //データベースを切断
            if(conn != null) {

                try {
                    conn.close();

                }catch(SQLException e) {
                    e.printStackTrace();

                    return null;
                }
            }
        }
        return employeeInfo;
    }
}
<%@ 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 charset="UTF-8">
<title>社員詳細</title>

<link type="text/css" rel="stylesheet" href="css/style.css">
<link type="text/css" rel="stylesheet" href="css/add-employee-style.css">
</head>

<body>

    <div id="container">
        <h3>社員詳細</h3>

        <form action="EmployeeControlServlet" method="POST">

            <c:choose>

                <c:when test="${THE_EMPLOYEE.employee_id == null }">
                    <input type="hidden" name="command" value="ADD" />
                </c:when>

                <c:when test="${THE_EMPLOYEE.employee_id != null }">
                    <input type="hidden" name="command" value="UPDATE" />
                    <input type="hidden" name="employee_id"
                        value="${THE_EMPLOYEE.employee_id}" />
                </c:when>

                <c:otherwise>
                エラーが発生しました
                </c:otherwise>
            </c:choose>

            <table>
                <tbody>
                    <tr>
                        <td><label>氏名</label></td>
                        <td><input type="text" name="name"
                            value="${THE_EMPLOYEE.name }" maxlength="20" /></td>
                    </tr>

                    <tr>
                        <td><label>氏名(ひらがな)</label></td>
                        <td><input type="text" name="name_hiragana"
                            value="${THE_EMPLOYEE.name_hiragana }" maxlength="20" /></td>
                    </tr>

                    <tr>
                        <td><label>生年月日</label></td>
                        <td><input type="text" name="birthday"
                            value="${THE_EMPLOYEE.birthday }" maxlength="10" /></td>
                    </tr>

                    <tr>
                        <td><label>性別</label></td>
                        <td><input type="radio" name="sex"
                            <c:if test="${THE_EMPLOYEE.sex != '1'}">checked</c:if> value="0" />
                            男 <input type="radio" name="sex"
                            <c:if test="${THE_EMPLOYEE.sex == '1'}">checked</c:if> value="1" />
                            女</td>
                    </tr>

                    <tr>
                        <td><label>メールアドレス</label></td>
                        <td><input type="text" name="mail_address"
                            value="${THE_EMPLOYEE.mail_address }" maxlength="50" /></td>
                    </tr>
                    <tr>
                        <td><label>電話番号</label></td>
                        <td><input type="text" name="telephone_number"
                            value="${THE_EMPLOYEE.telephone_number }" maxlength="13" /></td>
                    </tr>
public class EmployeeInfo implements Serializable{

    private int employee_id;                //社員ID            employee_info
    private String name;                    //氏名                employee_info
    private String name_hiragana;            //氏名(ひらがな)    employee_info
    private String business_manager;        //担当管理営業        employee_info
    private String birthday;                //生年月日            employee_info
    private String sex;                    //性別                employee_info
    private String mail_address;            //メールアドレス    employee_info
    private String telephone_number;        //電話番号            employee_info
    private String enter_date;                //入社日            employee_state
    private String retire_date;            //退社日            employee_state
    private String company_info_id;        //所属会社ID        employee_info
    private String department;                //事業部            employee_info
    private String commissioning_status;    //稼働状況            employee_info
    private String status;                    //ステータス        employee_state


    public EmployeeInfo() {

    }

    /**
     * 社員リストメソッド
     * list.jsp表示用
     *
     * @param employee_id
     * @param name
     * @param name_hiragana
     * @param business_manager
     * @param birthday
     * @param enter_date
     * @param company_info_id
     * @param department
     * @param commissioning_status
     */
    public EmployeeInfo(int employee_id, String name,String name_hiragana, String business_manager,String birthday,String enter_date,String company_info_id,String department,String commissioning_status) {

        this.employee_id = employee_id;
        this.name = name;
        this.name_hiragana = name_hiragana;
        this.business_manager = business_manager;
        this.birthday = birthday;
        this.enter_date = enter_date;
        this.company_info_id = company_info_id;
        this.department = department;
        this.commissioning_status = commissioning_status;

        }

    /**
     * 社員リストメソッド
     * detail.jsp用
     *
     * @param name
     * @param name_hiragana
     * @param business_manager
     * @param birthday
     * @param sex
     * @param mail_address
     * @param tel_number
     * @param company
     * @param enter_date
     * @param retire_date
     * @param company_info_id
     * @param department
     * @param commissioning_status
     * @param status
     */
    public EmployeeInfo(String name,String name_hiragana, String business_manager,String birthday,String sex,String mail_address,String telephone_number,String enter_date,String retire_date,String company_info_id,String department,String commissioning_status,String status) {

        this.name = name;
        this.name_hiragana = name_hiragana;
        this.sex = sex;
        this.mail_address = mail_address;
        this.business_manager = business_manager;
        this.telephone_number = telephone_number;
        this.birthday = birthday;
        this.enter_date = enter_date;
        this.retire_date = retire_date;
        this.company_info_id = company_info_id;
        this.department = department;
        this.commissioning_status = commissioning_status;
        this.status = status;

        }

    public EmployeeInfo(int employee_id,String name,String name_hiragana, String business_manager,String birthday,String sex,String mail_address,String telephone_number,String enter_date,String retire_date,String company_info_id,String department,String commissioning_status,String status) {

        this.employee_id = employee_id;
        this.name = name;
        this.name_hiragana = name_hiragana;
        this.sex = sex;
        this.mail_address = mail_address;
        this.business_manager = business_manager;
        this.telephone_number = telephone_number;
        this.birthday = birthday;
        this.enter_date = enter_date;
        this.retire_date = retire_date;
        this.company_info_id = company_info_id;
        this.department = department;
        this.commissioning_status = commissioning_status;
        this.status = status;

        }

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2019/01/21 15:24

    最後に書きましたが「編集では履歴から確認可能です」
    「載せない方がよい」と判断されたのでしたら削除依頼を出されるのが適当です。

    キャンセル

  • tkturbo

    2019/01/21 15:25

    EmployeeInfoクラスのソースコードも追加願います。(たぶんここが問題の原因)

    キャンセル

  • nyan_engineer

    2019/01/21 15:44

    >mts10806さん
    特段、問題はありませんのでこのまま質問依頼を出させていただきます。
    ご指摘ありがとうございます。

    >tkturboさん
    ソースコードを追加しました。(文字数の関係上、EmployeeControlServletは削除しました)

    キャンセル

回答 2

checkベストアンサー

+1

呼んでいるコンストラクタは、こちらだと思いますが

public EmployeeInfo(int employee_id,String name,String name_hiragana, String business_manager,String birthday,String sex,String mail_address,String telephone_number,String enter_date,String retire_date,String company_info_id,String department,String commissioning_status,String status) {

実際のわたしている引数の順序は、以下のようになってますので、違うフィールドに値が設定されていると思います。

new EmployeeInfo(employeeId,name,name_hiragana,sex,mail_address,business_manager,telephone_number,birthday,enter_date,retire_date,company_info_id,department,commissioning_status,status);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/22 21:36

    ご回答いただきありがとうございます。
    引数の順序という基本的な部分が抜けてました。。
    正常に表示されるようになりました!ありがとうございました。

    キャンセル

0

EmployeeInfoのコンストラクタの使い方が間違っている。

// EmployeeListDAO
employeeInfo = new EmployeeInfo(employeeId,
                                name,
                                name_hiragana,
                                sex,
                                mail_address,
                                business_manager,
                                telephone_number,
                                birthday,
                                enter_date,
                                retire_date,
                                company_info_id,
                                department,
                                commissioning_status,
                                status);
// EmployeeInfo
public EmployeeInfo(int employee_id,
                    String name,
                    String name_hiragana,
                    String business_manager,
                    String birthday,
                    String sex,
                    String mail_address,
                    String telephone_number,
                    String enter_date,
                    String retire_date,
                    String company_info_id,
                    String department,
                    String commissioning_status,
                    String status) {

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 89.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る