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

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

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

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

Java

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

servlet

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

13116閲覧

ArrayListを利用したformからpostした変数の取り出し方について

an6

総合スコア20

JSP

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

Java

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

servlet

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

0クリップ

投稿2016/09/07 14:25

編集2016/09/07 14:26

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
JavaでDBからある条件にマッチするデータをArrayListでJSPに表示させています。ある特定のカラムはNullなのでformを使って値を入力し、それをServletに渡そうとしています。

###発生している問題・エラーメッセージ

例えばArrayList利用してJSPに3レコード表示させた場合、formのテキストボックスもあるカラムに三つできることになります。それをPostメソッドでどのようにServletに渡したらよいかどうかがわからず行き詰まっています。
どのように実現したらよいかアドバイスいただけないでしょうか。

###該当のソースコード Java -JSP- <c:forEach var="shipment" items="${shipmentlist}"> <tr><% int i=1;%> <td><c:out value="${selectedshipment.system_no}" /></td> <td><c:out value="${selectedshipment.item}" /></td> <td><input type="text" name="qty+i"></td> <td><input type="text" name="date+i"></td> <% i++; %></tr> </c:forEach> </tbody> </table> <input type="hidden" name="count" value="i"> <input type="submit" value="入力"> </form> -Servlet- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); String i = request.getParameter("count"); int uid=Integer.parseInt("i"); for(int y=1; y<uid;y++){ String r = request.getParameter("name+y"); String r2 = r+ ......... どのように三つ変数を持たせたらよいかわからず、ここで行き詰まっています。

###試したこと
JSPのArrayListのループ回数をServletに渡し、なんとかうまくできないかと考えましたが挫折しました。

###補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードを拝見しました。変数名にループ値を追加したものを使いたいのですね。

その場合、次のようにすると良いでしょう。

html

1<input type="text" name="qty${i}"> 2<input type="text" name="date${i}">

ループ変数 i の値が 例えば3の場合は、qty3、date3になります。

対してサーブレット側は、同様に

java

1for(int y=1; y<uid;y++){ 2 String qty = request.getParameter("qty"+y); 3 ...... 4}

と、同様の名前にしてあげると良いでしょう。

投稿2016/09/08 02:54

A-pZ

総合スコア12011

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

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

退会済みユーザー

退会済みユーザー

2016/09/08 03:51

javax/servlet/ServletRequest.html#getParameterValues(java.lang.String) を忘れてる予感
an6

2016/09/08 14:21

A-pZさん ありがとうございます。JSPの方を教えていただいた通り <c:forEach var="shipment" items="${shipmentlist}"> <tr><% int i=1;%> <td><c:out value="${selectedshipment.system_no}" /></td> <td><c:out value="${selectedshipment.item}" /></td> <input type="text" name="qty${i}"> <input type="text" name="date${i}"> <% i++; %></tr> </c:forEach> </tbody> </table> <input type="hidden" name="count" value="i"> <input type="submit" value="入力"> </form> としてみましたが、以下のエラーが出てしまいました。 type Exception report message For input string: "i" description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NumberFormatException: For input string: "i" java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) java.lang.Integer.parseInt(Integer.java:580) java.lang.Integer.parseInt(Integer.java:615) servlet.ReceiveASN1.doPost(ReceiveASN1.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:650) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) どこに問題があるのか教えていただけないでしょうか?度々恐れ入ります。
an6

2016/09/08 14:22

unknown00012さん コメントありがとうございます。 javax/servlet/ServletRequest.html#getParameterValues(java.lang.String) を忘れてる予感 >>これについてもう少し詳しく教えていただけないでしょうか?
A-pZ

2016/09/09 11:58

ReceiveASN1.java:38にて例外が発生していますね。 JSPから送信している値 i が ReceiveASN1.javaで数値型に変換できていないのではないでしょうか。 <input type="hidden" name="count" value="i"> としていますが、これでは、name=i の文字列としてサーブレットに送信してしまうでしょう。書くならば、<input type="hidden" name="count" value="${i}"> ではないでしょうか。
an6

2016/09/10 01:20

A-pZさん いつもありがとうございます。 JSPからサーブレットに値が渡されているか確認するためにJSPのフォームから date qty 20160907 1 20160908 2 20160909 3 と入力し、サーブレット側には以下のコードを書きました。 String date = request.getParameter("date"); String qty= request.getParameter("qty"); String date1 = request.getParameter("date"+1); String qty1= request.getParameter("qty"+1); String date2 = request.getParameter("date"+2); String qty2= request.getParameter("qty"+2); String date3 = request.getParameter("date"+3); String qty3= request.getParameter("qty"+3); String x = request.getParameter("count"); System.out.println(qty); System.out.println(date); System.out.println(qty1); System.out.println(date1); System.out.println(qty2); System.out.println(date2); System.out.println(qty3); System.out.println(date3); System.out.println(x); 結果 20160907 1 null null null null null null となってしまいました。 20160907 1 のみということは、きちんとループされていない気がします。 JSPで変数を定義してかつそれをループさせる際の書き方に自信がありません、これで合っていますでしょうか?指摘していただいた<input type="hidden" name="count" value="${i}">の部分は修正済みです。 何度も申しわけありませんが教えていただけないでしょうか。
A-pZ

2016/09/10 12:19

なるほど、JSPでループ変数 i の宣言部分と、EL式の使い方にズレがありましたね。失礼しました。<c:foreach>を使う場合、ループ変数を宣言する便利な方法があります。 <c:forEach var="target" items="${list}" varStatus="i" begin="1"> のように、varStatusとbegin属性を追加しておくと、<input type="text" name="qty${i.index}">と記述しておくと、qty1,qty2,...のようになります。スクリプトレットで宣言した変数はELから参照するのは素直にできません。JSTLで宣言した内容はELからでも参照できますのでお試しください。 以下も参考にしてください。 http://struts.wasureppoi.com/jstl/02_foreach.html
an6

2016/10/01 06:20

A-pZさん ありがとうございます! 教えていただいたとおりに作ってみたら動きました。 過程で色々と学びがありました。 また機会があればどうぞよろしくおねがい致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問