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

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

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

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

Java

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

servlet

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

Q&A

解決済

1回答

13244閲覧

テーブルから値を受け渡したい

reiasu

総合スコア7

JSP

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

Java

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

servlet

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

0グッド

0クリップ

投稿2018/05/25 13:10

編集2018/05/28 01:37

前提・実現したいこと

現在、JAVAで<c:forEach>でJSPに書きだしたテーブルから値をサーブレットに参照しようとしているのですが、一番最後に上書きしたものと思われるものしか表示できません。どうにか、それぞれから値を受け渡したいのですが、どうすればよいでしょうか? 

イメージ説明
例を挙げると検索を行うとこのように一覧が表示されます。
この時、佐藤雄介さんのデータを更新したいと、そちら側の更新ボタンを押すと……
イメージ説明]
このように雄介さんではなく太郎さんのデータが出てきてしまうのです。

少し見にくいですがよろしくお願いします。

該当のソースコード

JAVA

1 2//値の取得 3 int member_id = Integer.parseInt(req.getParameter("member_id")); 4 String member_name = req.getParameter("member_name"); 5 String member_address = req.getParameter("member_address"); 6 String member_tel = req.getParameter("member_tel"); 7 String member_email = req.getParameter("member_email"); 8 String member_birthday = req.getParameter("member_birthday"); 9 10 MemberBean bean = new MemberBean(member_id,member_name,member_address,member_tel,member_email,member_birthday); 11 12 13 if(req.getParameter("update") != null){ //更新するを押した場合の処理 14 //リクエストスコープに必要な値を入れる。 15 req.setAttribute("members", bean); 16 17 //リクエストをmemberUpdate.jspに転送する。 18 RequestDispatcher rd = req.getRequestDispatcher("/memberUpdate.jsp"); 19 rd.forward(req, res); 20 } 21 22 if(req.getParameter("delete") != null){ //削除するを押した場合の処理 23 //リクエストスコープに必要な値を入れる。 24 req.setAttribute("members", bean); 25 26 //リクエストをmemberDelete.jspに転送する。 27 RequestDispatcher rd = req.getRequestDispatcher("/memberDelete.jsp"); 28 rd.forward(req, res); 29 } 30 }

JAVA

1<form action="/STP/MemberResultServlet" method="post"> 2<table border="1" style="border-collapse: collapse"> 3<tr><th>会員ID</th><th>氏名</th><th>住所</th><th>TEL</th><th>E-Mail</th><th>生年月日</th><th></th></tr> 4<c:forEach items="${members}" var="member"> 5<tr><td><input type="hidden" name="member_id" value="${member.member_id}">${member.member_id}</td> 6<td><input type="hidden" name="member_name" value="${member.member_name}">${member.member_name}</td> 7<td><input type="hidden" name="member_address" value="${member.member_address}">${member.member_address}</td> 8<td><input type="hidden" name="member_tel" value="${member.member_tel}">${member.member_tel}</td> 9<td><input type="hidden" name="member_email" value="${member.member_email}">${member.member_email}</td> 10<td><input type="hidden" name="member_birthday" value="${member.member_birthday}">${member.member_birthday}</td> 11<td><input type="submit" name="update" value="更新"><input type="submit" name="delete" value="削除"></td></tr> 12</c:forEach> 13</table> 14</form>

java

1public class MemberBean implements Serializable { 2 private int member_id; 3 private String member_name; 4 private String member_address; 5 private String member_tel; 6 private String member_email; 7 private String member_birthday; 8 private String member_enter; 9 private String member_exit; 10 11 public MemberBean(int member_id, String member_name, String member_address, String member_tel, String member_email, String member_birthday, String member_enter, String member_exit){ 12 this.member_id = member_id; 13 this.member_name = member_name; 14 this.member_address = member_address; 15 this.member_tel = member_tel; 16 this.member_email = member_email; 17 this.member_birthday = member_birthday; 18 this.member_enter = member_enter; 19 this.member_exit = member_exit; 20 } 21 22 public MemberBean(int member_id, String member_name, String member_address, String member_tel, String member_email, String member_birthday){ 23 this.member_id = member_id; 24 this.member_name = member_name; 25 this.member_address = member_address; 26 this.member_tel = member_tel; 27 this.member_email = member_email; 28 this.member_birthday = member_birthday; 29 } 30 31 public MemberBean(){ 32 33 } 34以下getとset

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

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

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

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

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

m.ts10806

2018/05/25 23:55

MemberBean() ではきちんと想定のデータが返されているのでしょうか
reiasu

2018/05/26 01:36

はい、想定のデータは返されています
m.ts10806

2018/05/26 01:40

ちなみに 一番最後に上書きしたものと思われるもの というのはどのような状態でしょうか?コードだけでは分からないのでサンプルデータなどで現象をご提示ください(画面キャプチャも適宜ご活用ください)
reiasu

2018/05/26 02:06

画像を追加しました
m.ts10806

2018/05/26 02:10

「表示したいデータが出ていない」ということは「想定したデータが返ってきてない」ということではないでしょうか。「更新」ボタンには欲しいmember_id が埋め込まれてないということですよね?MemberBean()のコードも提示された方が良いですね。
reiasu

2018/05/26 14:16

MemberBeanを追加しました。
guest

回答1

0

ベストアンサー

繰り返し表示をしている会員情報すべてをhiddenパラメータで渡しているので、2名表示されると、常に2名分の内容が送信されているのですが、どのボタンを押しているのかを判定できていない まま、サーブレット側でgetParameterをしているので、その先頭を取得します。

具体的には、次のようにパラメータが送信されているでしょう。

member_id=123 member_id=234 member_name=佐藤太郎 member_name=佐藤雄介 ....

これでは結局何を選んでいるかわからないので、よくある手法としては、

送信ボタンをbuttonにし、buttonを押したときにJavaScriptで選択した値を送信するための値をhiddenへ格納する

例えば、以下のように

<c:forEach items="${userlist}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td> <input type="button" name="id" value="詳細" onclick="goDetail(${user.id})" /> </td> </tr> </c:forEach> <input type="hidden" id="id" name="id" value="" >

と、表示されるボタンごとに、goDetail(ユーザID)を実行するようにし、JavaScriptに以下を仕込みます。

JavaScript

1var goDetail = function(id) { 2 document.getElementById("id").value = id; 3 document.forms[0].submit(); 4}

こうすることで、選択したボタンの番号が特定できるので、詳細画面で必要な情報を再検索するだけで済みますし、送信するパラメータの数も必要最低限にできますので、エラーチェックやテストも楽になるでしょう。

投稿2018/05/26 03:28

A-pZ

総合スコア12011

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

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

reiasu

2018/05/28 01:50

すみません、JavaScriptではなくJavaでお願いします。 私が無知なだけかもしれませんが・・・・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問