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

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

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

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

PostgreSQL

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

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

4092閲覧

データ削除後のデータが残る

cayribaka

総合スコア19

JSP

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

PostgreSQL

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

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/06/19 06:33

編集2017/06/19 07:50

年月をweb上で指定すると、DBから該当の体重データを表示するというものです.
問題が以下の画面のような場合において発生します。
イメージ説明

上の写真のように**、データが一つしかない時に、削除ボタンを押すと、DBからデータは削除できるのですが、再読み込みをしても以下のように、画面上には消す前のデータが表示されっ放しとなってしまいます**。(DB内は確実に削除されています)
イメージ説明

・削除時のServlet(HistoryDelete.java)は以下のようにコーディングしております。

↓History.java

Java

1package servlet; 2 3import java.io.IOException; 4import java.util.List; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12import javax.servlet.http.HttpSession; 13 14import model.HistoryLogic; 15import model.User; 16import model.WeightHistory; 17 18@WebServlet("/History") 19public class History extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 HttpSession session = request.getSession(); 24 session.setAttribute("weightHistoryLength", null); 25 User user = (User) session.getAttribute("loginUser"); 26 27 if(user != null) { 28 if(session.getAttribute("year") != null) { 29 if(!session.getAttribute("year").equals("")) { 30 String year = session.getAttribute("year").toString(); 31 String month = session.getAttribute("month").toString(); 32 HistoryLogic historyLogic = new HistoryLogic(); 33 List<WeightHistory> weightHistoryList = historyLogic.execute(user.getUserId(), Integer.parseInt(year), Integer.parseInt(month)); 34 if(!weightHistoryList.isEmpty()) { 35 session.setAttribute("historiesLength",weightHistoryList); 36 } 37 session.setAttribute("year", ""); 38 session.setAttribute("month", ""); 39 } 40 } 41 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/history.jsp"); 42 requestDispatcher.forward(request, response); 43 } 44 else { 45 response.sendRedirect("/bodyMassIndex/"); 46 } 47 } 48 49 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 50 // リクエストパラメータの取得 51 request.setCharacterEncoding("utf-8"); 52 String year = request.getParameter("year"); 53 String month = request.getParameter("month"); 54 HttpSession session = request.getSession(); 55 session.setAttribute("weightHistoryLength", null); 56 User user = (User) session.getAttribute("loginUser"); 57 58 try { 59 if(!(year.equals("-1") || month.equals("-1"))) { 60 HistoryLogic historyLogic = new HistoryLogic(); 61 List<WeightHistory> weightHistoryList = historyLogic.execute(user.getUserId(), Integer.parseInt(year), Integer.parseInt(month)); 62 63 if(!weightHistoryList.isEmpty()) { 64 session.setAttribute("historiesLength",weightHistoryList); 65 } 66 else { 67 request.setAttribute("errorMessage", "対象の年月にデータが入力されていません。"); 68 } 69 } 70 else if(year.equals("-1")) { 71 request.setAttribute("errorMessage", "年が選択されていません。"); 72 } 73 else if(month.equals("-1")) { 74 request.setAttribute("errorMessage", "月が選択されていません。"); 75 } 76 else { 77 request.setAttribute("errorMessage", "なぜかダメです。"); 78 } 79 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/history.jsp"); 80 requestDispatcher.forward(request, response); 81 } 82 catch(Exception e) { 83 e.printStackTrace(); 84 request.setAttribute("errorMessage", "進捗、ダメです。"); 85 } 86 } 87} 88 89``` 90 91↓history.jsp 92```jsp 93<%@ page language="java" contentType="text/html; charset=UTF-8" 94 pageEncoding="UTF-8"%> 95<%@ page import="java.util.List" %> 96<%@ page import="model.WeightHistory" %> 97<!DOCTYPE html"> 98<html> 99<head> 100<link rel="stylesheet" type="text/css" href="css/menu.css"/> 101<link rel="stylesheet" type="text/css" href="css/history.css?20170619"/> 102<meta charset="UTF-8"> 103 104<title>体重管理アプリケーション</title> 105<script src="js/lib/jquery-3.2.1.min.js"></script> 106<script src="js/menu.js"></script> 107</head> 108<body onload="selectColorChange(2);"> 109 <jsp:include page="menu.jsp"/> 110 <div id="div1"> 111 <div id="div2"> 112 <form action="/bodyMassIndex/History" method="post"> 113 <div id="errorMessage"><p><%= request.getAttribute("errorMessage") != null ? request.getAttribute("errorMessage") : " " %></p></div> 114 115 <!-- 年のセレクトボックスの作成 --> 116 <select name="year"id="box1"> 117 <option value="-1"></option> 118 <option value="2017">2017</option> 119 <option value="2018">2018</option> 120 <option value="2019">2019</option> 121 <option value="2020">2020</option> 122 </select> 123 124 <!-- 月のセレクトボックスの作成 --> 125 <select name="month"id="box2" style="margin-left:50px"> 126 <option value="-1"></option> 127 <option value="1">1</option> 128 <option value="2">2</option> 129 <option value="3">3</option> 130 <option value="4">4</option> 131 <option value="5">5</option> 132 <option value="6">6</option> 133 <option value="7">7</option> 134 <option value="8">8</option> 135 <option value="9">9</option> 136 <option value="10">10</option> 137 <option value="11">11</option> 138 <option value="12">12</option> 139 </select> 140 141 <!-- ボタンの作成 --> 142 143 <input type="submit" value="表示する" id="button2"> 144 </form> 145 <a href="/bodyMassIndex/Record"><input type="button" value="記録する" id="button1"/></a> 146 </div> 147 148 <div id="div3"> 149 <h3 id="text1"><pre> 日付 体重 </pre></h3> 150 <% List<WeightHistory> historyList = (List<WeightHistory>)session.getAttribute("historiesLength"); 151 if (historyList != null) { 152 for(int i = 0; i < historyList.size(); i++) { %> 153 <span id="line"> 154 <pre><%= (historyList.get(i).getTargetDate().getYear() + 1900) + "/" + (historyList.get(i).getTargetDate().getMonth() + 1) + "/" + historyList.get(i).getTargetDate().getDate() %> <%=(int) historyList.get(i).getWeight() %><span id="kgwasshoi">kg</span> <a href="Record?logId=<%= historyList.get(i).getLogId() %>" id="tag1">編集</a> <a href="HistoryDelete?logId=<%= historyList.get(i).getLogId() %>" id="tag2">削除</a></pre> 155 </span> 156 <% } 157 } %> 158 </div> 159 </div> 160</body> 161</html> 162``` 163HistoryLogic.java 164```Java 165package model; 166import java.sql.Date; 167import java.util.List; 168import dao.WeightHistoryDAO; 169 170public class HistoryLogic { 171 172 public List<WeightHistory> execute(int userId, int targetYear, int targetMonth) { 173 WeightHistoryDAO dao = new WeightHistoryDAO(); 174 return dao.weightHistoryFindAll(userId, targetYear, targetMonth); 175 } 176 177 public WeightHistory execute(int userId,Date targetDate){ 178 WeightHistoryDAO dao=new WeightHistoryDAO(); 179 return dao.weightHistoryFind(userId, targetDate); 180 } 181} 182HistoryDelete.java 183``````Java 184package servlet; 185 186import java.awt.Frame; 187import java.io.IOException; 188import java.util.List; 189 190import javax.servlet.ServletException; 191import javax.servlet.annotation.WebServlet; 192import javax.servlet.http.HttpServlet; 193import javax.servlet.http.HttpServletRequest; 194import javax.servlet.http.HttpServletResponse; 195import javax.servlet.http.HttpSession; 196import javax.swing.JOptionPane; 197 198import model.HistoryDeleteLogic; 199 200@WebServlet("/HistoryDelete") 201public class HistoryDelete extends HttpServlet { 202 private static final long serialVersionUID = 1L; 203 204 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 205 HttpSession session = request.getSession(); // セッションを取得するための準備 206 int logId; // ログインIDを保存しておくための変数 207 StringBuffer urlBuffer = request.getRequestURL(); // 変数 urlBuffer に現在のページのURLを格納する(ただし、?以降のパラメータ情報は取得できない) 208 String url = urlBuffer.append("?").append(request.getQueryString()).toString(); // 先ほど取得したURL文字列の後ろに、現在のパラメータ情報をドッキングする 209 int indexOfParam = url.indexOf("="); // パラメータ付きURLかどうかを調べる(=マークがあるかどうか) 210 if(session.getAttribute("loginUser") != null && indexOfParam != -1) { 211 logId = Integer.parseInt(url.substring(indexOfParam + 1)); // =マークから先を切り取り、取得した文字列を変数 logId に格納する(int型へキャスト) 212 HistoryDeleteLogic hdl=new HistoryDeleteLogic(); 213 List<Integer> list = hdl.act(logId); 214 int result; 215 Frame frame = new Frame(); 216 Object[] options = { "OK", "CANCEL" }; 217 frame.setAlwaysOnTop(true); 218 result = JOptionPane.showOptionDialog(frame, "選択した履歴を削除してよろしいですか?", "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]); 219 switch (result) { 220 case JOptionPane.OK_OPTION: 221 hdl.execute(logId); 222 Frame frame2 = new Frame(); 223 Object[] options2 = { "OK" }; 224 frame2.setAlwaysOnTop(true); 225 JOptionPane.showOptionDialog(frame2, "削除しました", "Information", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options2, options2[0]); 226 case JOptionPane.NO_OPTION: 227 case JOptionPane.CANCEL_OPTION: 228 default: 229 session.setAttribute("year", list.get(0)); 230 session.setAttribute("month", list.get(1)); 231 session.setAttribute("weightHistoryLength", null); 232 response.sendRedirect("/bodyMassIndex/History"); 233 break; 234 } 235 } 236 else { 237 response.sendRedirect("/bodyMassIndex/"); 238 } 239 240 } 241 242} 243 244``` 245 246 247 248 249やりたいこととして、**データが一つしかない時に、削除ボタンを押して、削除後にリロードすると、データが何も表示されない状態で、表示させたいと考えております。** 250 251拙い文章で申し訳ありませんが、回答よろしくお願いいたします。

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

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

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

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

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

kanimaru

2017/06/19 06:48

Historyのサーブレットと、出力しているJSPのソースコードも追記いただけますでしょうか。
cayribaka

2017/06/19 06:53

承知しました。少々お待ちください。
tkturbo

2017/06/19 06:59

java.awt.Frameもjavax.swing.JOPtionPaneもクライアントサイドのGUIを作るためのクラスなわけですが、なぜ混在しているのでしょう?
cayribaka

2017/06/19 07:47 編集

@tkturbo様 回答ありがとうございます。調べた限り、このクラスを入れなければ、削除するときの[OK,CANCEL]ダイアログを表示する方法がなかったためです。エラーを消す時に入れてしまったわけではありませんでした。
tkturbo

2017/06/19 07:18

History.javaはありますが、HistoryDelete.javaはどこでしょう?
guest

回答1

0

ベストアンサー

Sessionに入れて表示した場合には、Sessionに残るので削除する際はSessionに残った情報も
削除してください。
Session切れるまで残ります。

投稿2017/06/19 07:06

kanimaru

総合スコア1013

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

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

cayribaka

2017/06/19 07:09

@kanimaru様 回答ありがとうございます。Sessionにいれてしまうと、残ってしまうのですね。コードを確認して、書き直します。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問