🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSP

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

Java

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

JavaScript

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

Q&A

解決済

1回答

1613閲覧

JSPの特定のセルの値をサーブレットに送信

TKM1165

総合スコア16

JSP

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

Java

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

JavaScript

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

0グッド

0クリップ

投稿2019/10/31 07:26

編集2019/10/31 08:22

Java初心者でフォルダ管理ツールの様な物を作成しています。

その際、

<form name="fm"> <h1>検索結果画面</h1> <h2>名前をクリックするとダウンロードします。</h2> <table style="text-align: center;"> <tr> <th>フォルダ名</th> <th>ステータス</th> <th>最終更新日</th> </tr> <% List cName = (ArrayList) request.getAttribute("cName"); for (int i = 0; i < cName.size();) { out.println("<tr><td><a href=\"/~/~/" + cName.get(i) + ".zip\" download=\"" + cName.get(i) + ".zip\">" + cName.get(i) + "</a></td>"); Object obj = cName.get(i); String content = obj.toString(); %> <% i++; if (cName.get(i).equals("0")) { %> <td> <select name="status" onchange="javascript:Change()"> <option value="0" selected>未完</option> <option value="<%out.print(content + "1"); %>" style="color:red;">[仕掛中]に変更</option> <option value="<%out.print(content + "2"); %>" style="color:blue">[完成]に変更</option> </select> </td> <% } if (cName.get(i).equals("1")) { %> <td> <select name="status" style="color:red;" onchange="javascript:Change()"> <option value="<%out.print(content + "0"); %>" style="color:black">[未完]に変更 </option> <option value="1" style="color:red" selected>仕掛中</option> <option value="<%out.print(content + "2"); %>" style="color:blue">[完成]に変更 </option> </select> </td> <% } if (cName.get(i).equals("2")) { %> <td> <select name="status" style="color:blue;" onchange="javascript:Change()"> <option value="<%out.print(content + "0"); %>" style="color:black">[未完]に変更</option> <option value="<%out.print(content + "1"); %>" style="color:red;">[仕掛中]に変更</option> <option value="2" style="color:blue" selected>完成</option> </select> </td> <% } i++; %> <td> <% out.println(cName.get(i)); i++; %> </td> </tr> <% } %> </table>

以上のようなテーブルを作成し、一覧表示を行っております。

そこで、その際ステータスの表示をセレクトタグで行い、それがチェンジされたら、[onchange]によってJavaScriptを起動し、サーブレットに送信するという動作を行っています。

しかし、現状だと、上手くサーブレットにこのオプションタグがチェンジされたよ!というのが送れず、その後の処理として考えている、

○○というフォルダのステータスが0、つまり未完に変えてほしいとリクエストがあったのでDBアップデートしてください、というのに上手く繋げられていません。

なので今はステータス部分をセレクトからアンカータグにし、ステータスアップデート専用のサーブレットにリンクさせ、そこから新しいHTMLに飛ばし、手動でフォルダ名と変えたいステータスを入力してもらうという形にしようかと考えています。

非常に長く分かりづらい文になってしまいましたが、ステータスをセレクトタグを使い上手く決まったフォルダのDBだけステータスをアップデートする方法はないでしょうか?

--追記--

Javascriptのコードです。

1function Change(){ 2 obj = document.fm.status; 3 index = obj.selectedIndex; 4 if(index != 0){ 5 content = obj.options[index].value; 6 document.getElementById("hiddenField").value=content; 7 } 8 document.fm.action = "/~/~/サーブレット名"; 9 document.fm.target = "_self"; 10 document.fm.method = "post"; 11 document.fm.submit(); 12 }

hiddenに送っている記述は色々試したまま消し忘れている物です。
実際はサーブレットへの遷移にしか使っていません・・・。

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

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

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

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

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

matobaa

2019/10/31 08:15

onchange="javascript:Change()" で呼び出されるはずのChange()が質問中にありませんが、質問に追記できるでしょうか?
TKM1165

2019/10/31 08:19

すみません、適当に切り取りすぎて情報不足が多々あると思います。追記します。
tetutetu

2019/10/31 08:32

・そもそも現在、セレクトボックスを操作した際に起こる挙動 (「送れず」だけでは何が起こっているのかが伝わりません) ・jsp側でvalueは間違いなく設定できているか ・セレクトボックスを操作した際にChange()を呼び出すこと自体はできているのか あたりの情報があった方が解決に近づくかと
TKM1165

2019/10/31 08:46 編集

すみません、急ぎの作業をしながらどうしても自作していたフォルダ管理ツールの分からない部分が、どうしても気になってとりあえずパッと質問してしまっています。時間が出来ましたら質問内容を少し編集します。その際はご回答お願いします。 ちなみに、JSPに書かれている内容の中には色々試した残骸が残ったままの部分も多々あるため、非常に見づらくなっています・・・。
matobaa

2019/10/31 08:47 編集

cName にはどんなものを入れていますか? ArrayList っぽいことは読み取れるのですが、何のリストかを知りたいです。フォルダのリスト? フォルダ名文字列のリスト? もし自作クラスのリストなのだとしたら、その自作クラスも追記できるでしょうか?
TKM1165

2019/10/31 08:53

cNameにはフォルダ名、仕掛状況を分岐させるための数字(0,1,2)、フォルダがINSERT、またはUPDATEされた際の更新日の3セットが、検索、または一覧表示した際のフォルダ数分[0]から入っています。
tetutetu

2019/10/31 08:56

自作クラスなのであれば、get○○等で取得する必要があるのでは?
TKM1165

2019/10/31 08:58

ちなみに苦戦している部分としては、一覧をループ表示しているからか、<option>を変更した際、サーブレットに送られるvalueの内容が確定で[2]になってしまうという部分でつまづいています。おそらくあのJavaScriptでは何列目の何行目の<option>をピンポイントで送れていないからだと考えます。
matobaa

2019/10/31 09:03

そうですね、だいたい挙動はつかめました。回答の方針はどれがお好みですか? [1] 不具合が出てるところだけちょっとだけ修正して動くようにする [2] この際だからきれいにする [3] がっつり今風に修正する [4] 根本的に見直す
guest

回答1

0

ベストアンサー

おそらく実現したいことは、フォルダ一覧があって、それぞれのフォルダについて<select>を出力しているので、そのselect1つ1つに対して変更があったら、その変更した内容だけをサーブレットに送信したのではないかと予想します。

その場合は、onchange で呼び出しているJavaScriptに対し、「どこから起動したのか」も与えてあげます。
自分自身を示す this を渡すか、どのファルダを変更したのかを一意に定める値を渡してあげると良いでしょう。 (例:onchange('folderA') )

これを受け取り、何らかのformパラメータに格納してサーブレットに送信すれば、どのselect要素の値が変更された、が特定できるでしょう。

投稿2019/10/31 13:23

A-pZ

総合スコア12011

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

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

TKM1165

2019/11/05 07:40

ごめんなさい、バタバタしていて全く返信が出来てませんでした!! 僕の下手くそすぎる説明から悩んでいる部分を正確に予測し、その対処法まで書いていただいて・・・驚きを隠せません。 申し訳ございませんが、解答をしていただいた方にベストアンサーを設定させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問