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

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

ただいまの
回答率

87.34%

更新時のテキストボックスに期待する値が入ってこない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 573

score 9

Postgresqlのテーブル[t_composition]

ID composition
 1 1:2
 2 1:3
 3 1:4

eclipseでpostgresqlのデータをJSP&ServletでブラウザでCRUDできるようにする
アプリケーションを作ってみているのですが
フォームの更新ボタンを押した際に「配合」テキストボックスに入ってくる値が画像赤丸
「model.Composition@6031aecc」(@から右の文字列は毎回変動している)のような値になってしまいます。
これを画像の青丸の文字列[1:3]のようにデータベースの値を表示させるにはどのようにすればよいのでしょうか?

イメージ説明

package controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
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 dao.CompositionDAO;
import model.Composition;

@WebServlet("/composition_main")
public class Composition_Main extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        CompositionDAO dao=new CompositionDAO();
        String action=request.getParameter("action");
        if(action != null && action.equals("delete")){
            dao.deleteOne(Integer.parseInt(request.getParameter("com_id")));
            request.setAttribute("msg", "1件削除しました。");
        }else if(action != null && action.equals("update")){
            Composition c=dao.findOne(Integer.parseInt(request.getParameter("com_id")));
            request.setAttribute("composition", c);
            request.setAttribute("title", "項目を編集してください。");
        }
        List<Composition> list=dao.findAll();
        request.setAttribute("list", list);
        RequestDispatcher rd= request.getRequestDispatcher("/WEB-INF/view/composition_main.jsp");
        rd.forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String c=request.getParameter("composition");
        if(c.isEmpty()){
            request.setAttribute("err","未記入の項目があります!");
        }else{
            CompositionDAO dao=new CompositionDAO();
            String com_id=request.getParameter("com_id");
            if(com_id != null){
                dao.updateOne(new Composition(Integer.parseInt(com_id),c));
                request.setAttribute("msg","1件更新しました。");
            }else{
                dao.insertOne(new Composition(c));
                request.setAttribute("msg","1件登録しました。");
            }
        }
        doGet(request,response);
    }
}
package dao;

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 javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import model.Composition;

public class CompositionDAO {
    private Connection db;
    private PreparedStatement ps;
    private ResultSet rs;

private void getConnection() throws NamingException, SQLException{
            Context context=new InitialContext();
            DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/jsp");
            this.db=ds.getConnection();
    }
    private void disconnect(){
        try{
            if(rs != null){rs.close();}
            if(ps != null){ps.close();}
            if(db != null){db.close();}
        }catch(SQLException e){
            e.printStackTrace();
        }
    }
    public List<Composition> findAll(){

        List<Composition> compositionList=new ArrayList<>();
        try {
            this.getConnection();
            ps=db.prepareStatement("SELECT * FROM t_composition ORDER BY com_id");
            rs=ps.executeQuery();
            while(rs.next()){
                int Co_id=rs.getInt("com_id");
                String Composition=rs.getString("composition");
                Composition composition=new Composition(Co_id,Composition);
                compositionList.add(composition);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }finally{
            this.disconnect();
        }
        return compositionList;
    }
    public boolean insertOne(Composition composition){
        try {
            this.getConnection();
            ps=db.prepareStatement("INSERT INTO t_composition(composition) VALUES(?)");
            ps.setString(1,composition.getComposition());
            int result=ps.executeUpdate();
            if(result != 1){
                return false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }finally{
            this.disconnect();
        }
        return true;
    }
    public Composition findOne(int com_id){
        Composition composition=null;
        try{
            this.getConnection();
            ps=db.prepareStatement("SELECT * FROM t_composition WHERE com_id=?");
            ps.setInt(1, com_id);
            rs=ps.executeQuery();
            if(rs.next()){
                String Composition=rs.getString("composition");
                composition=new Composition(com_id,Composition);
            }
        }catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }finally{
            this.disconnect();
        }
        return composition;
    }
    public boolean updateOne(Composition composition){
        try{
            this.getConnection();
            ps=db.prepareStatement("UPDATE t_composition SET composition=? WHERE com_id=?");
            ps.setString(1, composition.getComposition());
            ps.setInt(2, composition.getCom_id());
            int result=ps.executeUpdate();
            if(result != 1){
                return false;
            }
        }catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }finally{
            this.disconnect();
        }
        return true;
    }
    public boolean deleteOne(int com_id){
        try{
            this.getConnection();
            ps=db.prepareStatement("DELETE FROM t_composition WHERE com_id=?");
            ps.setInt(1, com_id);
            int result=ps.executeUpdate();
            if(result != 1){
                return false;
            }
        }catch (SQLException e) {
            e.printStackTrace();
        } catch (NamingException e) {
            e.printStackTrace();
        }finally{
            this.disconnect();
        }
        return true;
    }
}
package model;
import java.io.Serializable;

public class Composition implements Serializable{
    private int com_id;
    private String composition;
    public Composition(){}
    public Composition(String composition){
        this.composition=composition;
    }
    public Composition(int com_id,String composition){
        this.composition=composition;
        this.com_id=com_id;
    }

    public int getCom_id() {
        return com_id;
    }
    public void setCom_id(int com_id) {
        this.com_id = com_id;
    }
    public String getComposition() {
        return composition;
    }
    public void setComposition(String composition) {
        this.composition = composition;
    }
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="model.*,java.util.*"%>
<%
List<Composition> list=(List<Composition>)request.getAttribute("list");
Composition composition=(Composition)request.getAttribute("composition");
String com_id=composition==null ? "":String.valueOf(composition.getCom_id());
String Composition=composition == null ? "":composition.getComposition();
String title=(String)request.getAttribute("title");
title=title==null? "登録してください。":title;
String err=(String)request.getAttribute("err");
String msg=(String)request.getAttribute("msg");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
<title>Composition</title>
</head>
<body>
<div class="container" style="margin-top:20px;">
<% if(err !=null){%>
<div class="alert alert-danger" role="alert">
<%=err %>
</div>
<%} %>
<% if(msg !=null){%>
<div class="alert alert-success" role="alert">
<%=msg %>
</div>
<%} %>
<p><%=title %></p>

<form action="/KrnApl/composition_main" method="post" >
  <div class="form-group">
    <label for="com_id">ID:</label>
    <input type="number" id="com_id" name="com_id" class="form-control" style="width:200px;" value="<%=com_id%>">
  </div>
  <div class="form-group">
    <label for="composition">配合:</label>
    <input type="text" id="composition" name="composition" class="form-control" style="width:200px;" value="<%=composition%>">
  </div>
  <%if(!com_id.isEmpty()) {%>
  <input type="hidden" name="com_id" value="<%=com_id %>">
  <%} %>
  <button type="submit" class="btn btn-primary"><%=com_id.isEmpty()?"登録":"更新" %></button>
</form>

<%if(list != null && list.size()>0){%>
<table class="table table-striped mt-4">
<tr><th>ID</th><th>配合</th><th>編集</th></tr>
<%for(Composition p:list) {%>
<tr><td><%=p.getCom_id() %></td><th><%=p.getComposition() %></th>
<td>
<a href="/KrnApl/composition_main?action=update&com_id=<%=String.valueOf(p.getCom_id()) %>" class="btn btn-primary">更新</a>
<a href="/KrnApl/composition_main?action=delete&com_id=<%=String.valueOf(p.getCom_id()) %>" class="btn btn-danger" onclick="return confirm('削除してよろしいですか?');">削除</a>
</td>
</tr>
<%} %>
</table>
<%} %>
</div>
<script>
var forms=document.getElementsByClassName("form-control");
var alerts=document.getElementsByClassName("alert");
for(var i=0;i<forms.length;i++){
    forms[i].addEventListener("focus",function(){
        for(var j=0;j<alerts.length;j++){
            alerts[j].style.display="none";
        }
    });
}
</script>
</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • azuapricot

    2019/08/23 10:14

    行データから対象列がきちんと取得できてないよーな。デバッグして中身みましたか?

    キャンセル

  • blue_cars

    2019/08/23 10:50

    デバッグの仕方もよくわからずやっていました。
    ご指摘のとおり変数名を変えてデバッグしてみたら値が入っていました。

    キャンセル

回答 1

checkベストアンサー

+1

Composition composition=(Composition)request.getAttribute("composition");

これをそのまま突っ込んでいるからと思います。

見た感じ下記を利用する必要があるのでは?

String Composition=composition == null ? "":composition.getComposition();

大文字小文字は別物です。
ただ、こういうミスが起きるのを防ぐべく、変数名はなるべく「何を持っているか」分かりやすい命名を心がけたほうが良いです。
前者は「composition_model」とするとかですね。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/08/23 10:50

    ご指摘のとおり変数名でした。変数名を変えてやることで表示されるようになりました。

    キャンセル

  • 2019/08/23 10:51

    解決されたようで何よりです。

    キャンセル

  • 2019/08/23 13:22

    大変助かりました。ありがとうございました。

    キャンセル

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

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

関連した質問

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