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

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

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

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

Java

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

Q&A

解決済

1回答

5320閲覧

顧客登録画面 更新処理のJSPについて

ryoga4869

総合スコア17

JSP

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

Java

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

0グッド

1クリップ

投稿2019/07/17 08:24

編集2019/07/18 06:53

顧客登録画面の更新処理を作成中です。

現在の状況は登録、一覧表示についてはある程度問題なく動かせています。
JSPで何点かネットを利用しても解決できない問題があったのでお聞きしております。

①formにoptionを使った性別を設定できるものを用意していますが
値(1,2,3)は取得できているのですが一覧表示にすると名前(男性,女性)ではなくそのまま値を表示してしまいます。名前を表示する方法はありますでしょうか?

②入力ができるformに入力した内容を送信するsubmitがあります。
一覧を表示しているテーブルのそれぞれのレコードに変更と削除という、レコードの値を持って画面へ遷移するsubmitを用意しているのですが、リンクとして機能しません。
form内では1つの遷移先しか持つことができない(javaのみでは)ようなのですが
テーブルでも同じなのでしょうか?
(onclick="location:href='./selectUp.java'"が機能しません)

③レコードのIDをURLを使って送る際、
onclick="location:href='./selectUp.java"?id= + id +"'"
と表記するつもりなのですが合ってますでしょうか?

④この画面の次画面でUpdateしたい内容をformに入力して頂く際に初期値として選択したレコードをformに入力しますが、formの欄の下にはこの画面と同様に一覧を表示しておりますので2種類のselect文を実行することになるのですが、この場合2種類のデータを別のArrayListに保管し表示することは可能なのでしょうか?
それとも指定したレコードの詳細を取得し表示することが出来るのでしょうか?

: 前略 : <form action="<%=request.getContextPath()%>/Main" method="post"> <table class="up"> <tr> <th>NO.</th> <th>お名前</th> <th>携帯電話番号</th> <th>性別</th> <th class="hide"></th> </tr> <tr> <td><input type="number" name="id" value=" " disabled="disabled" style=background-color:#ffe0ed ></td> <td><input type="text" maxlength="20" name="name" placeholder="20字以内で名前を入力"></td> <td><input type="tel" name="tel" pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}" placeholder="090-1234-5678(半角数字で入力)"></td> <td><select name="gender"> <option value=""> </option> <option value="1">男性</option> <option value="2">女性</option> <option value="3">その他</option></select></td> <td><input type="submit" value="新規登録" style="border:2px solid #7b3cff; background-color:#ffd700" onmouseover="this.style.background='#ffff00'" onmouseout="this.style.background='#ffd700'" onclick="location:href='./Main.java'" class="up-butt"></td> </tr> <tr><td align="left" style="border:2px solid #fcc2c8; background-color:#ffe0ed; color:#ff69b4; font-size: 20px" colspan="4"> メッセージ:</td> </tr> </table> </form> <table class="dow"> <thead> <tr> <th>NO.</th> <th>お名前</th> <th>携帯電話番号</th> <th>性別</th> <th class="hide"></th> </tr> </thead> <tbody> <c:forEach var="mutterList" items="${mutterList}"> <tr> <td><c:out value="${mutterList.id}" /></td> <td><c:out value="${mutterList.name}"/></td> <td><c:out value="${mutterList.tel}"/></td> <td><c:out value="${mutterList.gender}"/></td> <td><input type="submit" value="更新" style="border:2px solid #32cd32; background-color:#32cd32" onmouseover="this.style.background='#00ff00'" onmouseout="this.style.background='#32cd32'" onclick="location:href='./selectUp.java'" class="update" name="update"> </td> <td><input type="submit" value="削除" style="border:2px solid #ff6347; background-color:#ff6347" onmouseover="this.style.background='#ff0000'" onmouseout="this.style.background='#ff6347'" onclick="location:href='./.delete.java'"class="delete" name="delete"></td> </tr> </c:forEach> </tbody> </table> </body> </html>

質問が多く長々と書いてしましましたが、不足している点は修正させて頂きますので
何卒よろしくお願い申し上げます。

修正したJSPです

<form action="<%=request.getContextPath()%>/Main" method="post"> <table class="up"> <tr> <th>NO.</th> <th>お名前</th> <th>携帯電話番号</th> <th>性別</th> <th class="hide"></th> </tr> <tr> <td><input type="number" name="id" value=" " disabled="disabled" style=background-color:#ffe0ed ></td> <td><input type="text" maxlength="20" name="name" placeholder="20字以内で名前を入力"></td> <td><input type="tel" name="tel" pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}" placeholder="090-1234-5678(半角数字で入力)"></td> <td><select name="gender"> <option value=""> </option> <option value="1">男性</option> <option value="2">女性</option> <option value="3">その他</option></select></td> <td><input type="submit" value="新規登録" style="border:2px solid #7b3cff; background-color:#ffd700" onmouseover="this.style.background='#ffff00'" onmouseout="this.style.background='#ffd700' class="up-butt"></td> </tr> <tr><td align="left" style="border:2px solid #fcc2c8; background-color:#ffe0ed; color:#ff69b4; font-size: 20px" colspan="4"> メッセージ:</td> </tr> </table> </form> <table class="dow"> <thead> <tr> <th>NO.</th> <th>お名前</th> <th>携帯電話番号</th> <th>性別</th> <th class="hide"></th> </tr> </thead> <tbody> <c:forEach var="mutterList" items="${mutterList}"> <tr> <td><c:out value="${mutterList.id}" /></td> <td><c:out value="${mutterList.name}"/></td> <td><c:out value="${mutterList.tel}"/></td> <td><c:out value="${mutterList.gender}"/></td> <td><input type="button" value="更新" style="border:2px solid #32cd32; background-color:#32cd32" onmouseover="this.style.background='#00ff00'" onmouseout="this.style.background='#32cd32'" onclick="location:href='<%=request.getContextPath()%>/Update?id=${mutterList.id}'" class="update" name="update"></td> <td><input type="button" value="削除" style="border:2px solid #ff6347; background-color:#ff6347" onmouseover="this.style.background='#ff0000'" onmouseout="this.style.background='#ff6347'" onclick="location:href='./.delete.java'"class="delete" name="delete"></td> </tr> </c:forEach> </tbody> </table> </body> </html>

このように修正してみましたがやはりボタンとしての機能はありません。
まだ画面遷移のURLが間違っているという事でしょうか?

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

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

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

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

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

m.ts10806

2019/07/17 08:47

①がボリューム大きすぎて②以下忘れてました。追記します
ryoga4869

2019/07/17 08:48

かしこまりました。ありがとうございます。
guest

回答1

0

ベストアンサー

①formにoptionを使った性別を設定できるものを用意していますが

値(1,2,3)は取得できているのですが一覧表示にすると名前(男性,女性)ではなくそのまま値を表示してしまいます。名前を表示する方法はありますでしょうか?

別テーブルにマスタデータを持ってJOINするか、性別くらいなら固定でしても良いと思います。

※全て未検証です
※テーブル定義が分からないのでDBはMySQL、genderは文字列前提で組んでいます

SQLで固定に書く場合

SQL

1select 2 *, 3CASE gender 4 WHEN '1' THEN '男性' 5 WHEN '2' THEN '女性' 6 WHEN '3' THEN 'その他' 7 ELSE 'その他' 8END as gender_name 9from mutter

jsp

1<td><c:out value="${mutterList.gender_name}"/></td>

jspに固定に書く場合

jsp

1<c:choose> 2 <c:when test="${mutterList.gender == '1' }" > 3  <c:out value="男性" /> 4 </c:when> 5 <c:when test="${mutterList.gender == '2' }" > 6  <c:out value="女性" /> 7 </c:when> 8 <c:when test="${mutterList.gender == '3' }" > 9  <c:out value="その他" /> 10 </c:when> 11 <c:otherwise> 12  その他 13 </c:otherwise> 14</c:choose>

定数的に配列に持っておく場合

java

1HashMap<String, String> genderList = new HashMap<String, String>(); 2genderList.put("1", "男性"); 3genderList.put("2", "女性"); 4genderList.put("3", "その他");

jsp

1<td><c:out value="${genderList[mutterList.gender]}"/></td>

この配列で登録時のセレクトボックスを作れば整合性も取れますしね。

別テーブルにマスタデータを持ってJOIN

前項の配列の部分をデータベースに持って
SQL取得時に名称も取得してしまうことを指します。

genderテーブル

gender_cdname
1男性
2女性
3その他

SQL

1select 2 m.* 3 ,g.gender_name 4from mutter m 5 inner join gender g on 6 m.gender = g.gender_cd

jsp

1<td><c:out value="${mutterList.gender_name}"/></td>

いずれの方法でも実現は可能ですが、
「マスタデータを持っておく」考え方を覚えれば色んな形で応用できますので、
練習がてらこちらを覚えたほうが良いかもしれません。
(性別や都道府県ってほぼ変わらないものですので、通常は固定です)

②入力ができるformに入力した内容を送信するsubmitがあります。

一覧を表示しているテーブルのそれぞれのレコードに変更と削除という、レコードの値を持って画面へ遷移するsubmitを用意しているのですが、リンクとして機能しません。
form内では1つの遷移先しか持つことができない(javaのみでは)ようなのですが
テーブルでも同じなのでしょうか?

同じです。そもそも機能しないのはformで囲ってないからです。

ただ別の質問でも書いたようにselectUp.javaのようにアクセスはできません。
サーブレットなので{プロジェクト名}{WebServletの指定}のURLである必要があります。
selectUpにマッピングしたURLでアクセスしてください。
URLの取り方はformのactionと同じです。

あと「削除」がどういう処理をするつもりなのか分かりませんが、少なくとも「更新」については「更新画面に遷移してその先で修正する」ので、submitのように処理を期待するものではなく、あくまでtype=buttonかaタグにして「画面遷移」の形をとってください。

例:

jsp

1<input type="button" value="更新" onclick="location.href='<%=request.getContextPath()%>/selectUp?id=${mutterList.id}'"> 2 3 4または 5<a href="<%=request.getContextPath()%>/selectUp?id=${mutterList.id}">更新</a>

※selectUpと決めつけてますが、きちんと自身が決めたサーブレットのURLを入れてくださいね。

③レコードのIDをURLを使って送る際、

onclick="location.href='./selectUp.java"?id= + id +"'"
と表記するつもりなのですが合ってますでしょうか?

間違っているので前項の最後に例で示しました。

④この画面の次画面でUpdateしたい内容をformに入力して頂く際に初期値として選択したレコードをformに入力しますが、formの欄の下にはこの画面と同様に一覧を表示しておりますので2種類のselect文を実行することになるのですが、この場合2種類のデータを別のArrayListに保管し表示することは可能なのでしょうか?

それとも指定したレコードの詳細を取得し表示することが出来るのでしょうか?

1つ1つ突っ込んでいくと

formの欄の下にはこの画面と同様に一覧を表示しておりますので2種類のselect文を実行することになるのですが、

なりません。一覧画面は一覧画面でSELECTし、更新画面は更新画面でSELECTします。

この場合2種類のデータを別のArrayListに保管し表示することは可能なのでしょうか?

可能ですが、保管したところでそれぞれSELECTを実行するのでほとんど意味はないと思います。

それとも指定したレコードの詳細を取得し表示することが出来るのでしょうか?

前回の質問の回答のコメントに書いた通り、where句を使います。

SQL

1select 2 * 3from mutter where id = ? -- ?には一覧画面から渡された値を取得する

「GETパラメータ」または「クエリストリング」が「一覧画面から渡された値を取得する」際のキーワードです。

蛇足

リクエストとレスポンスについて基本をおさえておきましょう。
でないと多分、全く進みません。

投稿2019/07/17 08:44

編集2019/07/18 07:00
m.ts10806

総合スコア80850

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

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

ryoga4869

2019/07/17 09:11

事細かに説明して頂き有難うございます。 前回教えて頂いた事も理解できていなかったようですね...すみません。 もう少し、説明を見ながら一つ一つ理解してみます。
m.ts10806

2019/07/17 09:12

根本的なところも理解が必要と思いましたので「蛇足」として参考記事を提示しておきました。 Javaに限らずWebをやっていくうえでは必要な前提知識です。
ryoga4869

2019/07/17 10:43

ありがとうございます。 ②についての質問ですが新規登録のsubmitにformに書いていた内容を移しました。更新のbottonにも遷移先を用意しましたが、質問にも記載した通りformの中に2つの遷移という事になるのでJavaScriptを利用しなければいけないという事でしょうか?
m.ts10806

2019/07/17 10:45

いえ、そもそもform不要です。
m.ts10806

2019/07/17 10:46

回答をゆっくりじっくり吟味してください。 「やりたいこと」と「本来すべき対応」は必ずしも一致しません。
ryoga4869

2019/07/17 10:58

formは不要なんですか!? 少し混乱してきました.... 分かりました。理解できるよう何度も読んでみます。
m.ts10806

2019/07/17 11:08

「画面遷移」です。リンクで十分です。 回答にあるキーワードであるGETパラメータやクエリストリングについては調べましたか?
m.ts10806

2019/07/17 11:16

正確には「formでも実現可能だが同等のことをリンクで短く記述できるのでリンクで十分」です。
ryoga4869

2019/07/18 01:24

知識不足のようなのでもう少し調べて整理した上でコーディングします。
m.ts10806

2019/07/18 01:31

はい。回答の最後にリンクを貼っている「リクエスト」と「レスポンス」については必須です。
m.ts10806

2019/07/18 07:00

ただ、何度も書いているようにaタグのリンクで充分です。
ryoga4869

2019/07/18 07:14

レイアウトとして四角で囲まれたボタンのようにしなければならないのですが aタグでも可能なのでしょうか?知識不足で申し訳ございません
m.ts10806

2019/07/18 08:21

可能です。そこはCSSの装飾なので調べてください。
ryoga4869

2019/07/18 08:33

分かりました確認してみます。 蛇足の一つ上に書かれているSQLよりupdate文を予測すると "UPDATE MUTTER SET NAME=?, TEL=?, GENDER=? WHERE ID=?" 少し奇妙ですがこのようになるのでしょうか?
m.ts10806

2019/07/18 08:57

奇妙ではないと思いますよ。 IDに取得したパラメータをセットすれば対象のデータのみ更新できます。
ryoga4869

2019/07/19 07:35

option属性の問題に関してはDBの環境等が変わってしまうタイミングで、納期までのことも含め、ひとまずDBの値ごとを変える事にしました。 画面推移のボタンに関してもCSSにじかんをとられてしまうことを考えbuttonを利用し遷移するようにしました。
m.ts10806

2019/07/19 07:37

>納期までのことも含め 苦言を呈すと、仕事や課題の代行をするサイトではないので、ご注意を。 中にはうまくやって仕事を他者に無料でやらせようという流れもちょくちょく見ます。 それは本来報酬を支払うべきものです。 学校の宿題や課題なら自分でやるべきものです。
m.ts10806

2019/07/19 07:39 編集

いずれにしてもJavaに限らず圧倒的に基礎知識が不足しているのは確かなので、 質問サイトでなんとかするのはやめたほうが良いかもしれません。 入門系の書籍を1つきちんと通してやったほうが何倍も効率的で着実でしょう(それかプログラミングスクール)。
ryoga4869

2019/07/19 07:40

承知しております。 自分のためにやっているものなので、つい答えを求めてしまわないように気をつけたいと思います。
ryoga4869

2019/07/19 07:42

分かりました。 もう少し自分での学習を進めます。 ありがとうございました。
m.ts10806

2019/07/19 07:44

>自分のためにやっているものなので では「納期」とは? 何度かやりとりさせていただいていますが、伝えたい内容と出てきている言葉と伝わっている内容が全てチグハグになっているように思います。 投稿する前に「赤の他人に伝わるだろうか」と考えてから投稿されたほうが無駄なやりとりもなくスムーズに進みますよ。
ryoga4869

2019/07/19 07:52

すみません。自分の中での目標期限のことを指していました。 コミュニケーション能力(相手に伝える力、読解力等)も勉強したいと思います。
m.ts10806

2019/07/19 07:56

相対するのは全くの赤の他人です。そこは意識されたほうが良いです。 (ペアプロとか家庭教師のような存在をお望みなら質問サイトではなくメンター使ってください)
ryoga4869

2019/07/19 08:05

そうですね。質問する場合、意識して文章が打てるよう気をつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問