• ベストアンサー

困っています

フォームに入力したデータをセッションに登録し、次の入力画面でそこまでたまったデータと入力されたデータを追加し、入力欄と一緒に表示するフォームを作っています。特にフォームの中のデータを取り出すあたりが分かりません。どなたか、アドバイス等お願いします。下のソースは作り掛けで、以前作った買い物かごをベースにしています。 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class form extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { HttpSession hs = request.getSession(true); ArrayList a = (ArrayList)hs.getAttribute("writing"); if( a == null ) { a = new ArrayList(); } request.setCharacterEncoding("JISAutoDetect"); String s1[] = request.getParameterValues("f1"); String s2 = request.getParameter("f2"); response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head><title>サーブレット</title></head>"); out.println("<body>"); out.println("<form action=http://....method=POST>"); out.println("<h2>入力フォーム</h2>"); out.println("<textarea name=f1 size=5 multiple>"); out.println("

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

サンプル作ろうかな?っと思ってたのですが…、全部やっては意味がないと思うので、 それにpcbeginnerさんも言っている事に共感が持てますね、 だから道を示すだけにしときます☆ サーブレットで再起的に自分を呼び出すのを作ろうとしたけど面倒で。。。(汗 あくまで道を示すだけです、それに関してはご理解下さい☆ 最初のフォームの送信側はHTMLでいいでしょ、っと言うより フォームをサーブレットで作るのは面倒だと思いますよ… <input type="text" name="name1" value=""> <input type="text" name="name2" value=""> のフォームがあったら受け取り側は… request.setCharacterEncoding("Windows-31J"); String name1 = request.getParameter("name1"); String name2 = request.getParameter("name2"); です、("Windows-31J")っていうのは文字化け防止のために行っています。 ちなみにint型に変換する時は Integer.parseInt(request.getParameter("name1"));です、 当然の事だけど数値に変換できない値はNGです。 ちなみにサーブレットでフォームを表現したいなら out.print("<input type=\"text\" name=\"name\" value=\"\">");になります、 「"」はエスケープしてください、 あとは受け取ったデータをArrayListに格納してセッションに入れれば良いかと… 流れとしてはフォームから送信→request.getParameterでデータ受け取り→セッションに入れる→ 表示先へ移動→表示先でセッションから値を取り出して→表示! って流れです、フォームの表示はぶっちゃげJSPの得意分野ですね、 JSPの勉強をお勧めします、JSP覚えたらサーブレットで表示を行うのが馬鹿らしく思えるくらい簡単ですよ(^o^) 適材適所があるので☆ それにサーブレットはできるだけ機能はまとめた方が良いと思います。 ぶっちゃげ一つで十分です、なので処理内容によって処理を分岐するようにした方が良いでしょう、 その辺はデザインパターンの勉強をして下さい。 簡単な方法としては… <INPUT type="hidden" name="action" value="○○"> っと言うような隠しパラメータを作って サーブレット側でString action = request.getParameter("action");っと受け取って if("○○".equals(action)){ } else if("△△".equals(action)){ みたいにするのが簡単です、慣れるまでこんな感じでサーブレットを使うといいと思いますよ☆

その他の回答 (2)

回答No.2

>JSPを習ってない… ってことは学生か新社会人で勉強し始めってところかな。 うーんと、課題で質問するときは、とりあえずJSP習ってないとか、 何々を使わなきゃいけない、何々しか使えないなど、 前提条件があるならその旨を記述した方が回答を得やすいかと。 あと作りかけの中途半端なものはかえってややこしくなるかなぁ。 で、後は何となく現状から考えられるヒントね。 >全く分かりませんでした。 ではダメですよ。 とりあえずサーブレットだけでやるとしたら、 フォーム1のhtmlを出力するサーブレットA フォーム2のhtmlを出力するサーブレットB の2つのサーブレットを作るか、 パラメータによって分岐して パラメータの値がAならフォーム1のhtmlを出力して パラメータの値がBならフォーム2のhtmlを出力する サーブレットを1つ作るかですね。 で、後はフォーム1のhtmlとフォーム2のhtmlを考えればいいわけで、 フォーム1は何かしらの入力欄があって、ボタンを押すと入力欄の内容をセッションに入れて、サーブレットBを呼ぶ(か、もしくはパラメータの値にBを入れてサーブレットを呼ぶ) フォーム2はセッションから入力欄の内容を取り出して表示する。 こんなところかな。

回答No.1

申し訳ありません、質問の内容が詳しく判らず… 誰かが答えてその反応を見ながら質問の内容を見極めようと思ったですが… 困り度3だったので逆に質問させて頂きます。 質問の内容は… フォームで入力されたデータを受け取る→次の入力画面に移動→そこでの入力されたデータを受け取る→今までに入力されたデータを表示。でいいのかな? まずフォームで入力されたデータを取り出すのは <input type="text" name="name" value="" size="14" maxlength="12" style="ime-mode: active"> っと言うフォームがあったとしたら String name = request.getParameter("name"); で受け取ります、 フォームのname属性とゲットパラメータを同じ値にすればいいです、 上記の例ならフォームのname属性は「name」なのでパラメータを受け取る時はnameを受け取るようにしてます。 これを複数用意する事によって複数の値を受け取れます。 ちなみに、ありもしないパラメーターを受け取ろうとするとエラーがでたような? これらを受け取ったらArrayListにでも格納してセッションに入れちゃいましょう、 セッション変数はその入力フォームがあるページ毎に用意してもいいと思うし hiddenで一度出力してまた全て受け取るようにしても良いと思います、多分前者の方が楽。 入力欄と一緒に表示と言うのはどういうのですか? もし、フォームに表示したいならvalue=""の""に書くように表示すれば問題ないです。 私は基本的にJSPで表示をするように心がけています、 サーブレットはあくまでコントロールの機能としか使ってません。 その方が楽だと思ってるし拡張や改善には向いているので。 なのでmomoti89さんのサーブレットがちょっと判らなかったです(汗 ArrayList a = (ArrayList)hs.getAttribute("writing");で どんな値を受け取ったのか判らないのでサンプルプログラムについては 何も言えなく心苦しいのですが…。頑張って下さい!!

noname#161341
質問者

補足

回答ありがとうございます! まだJSPを習ってない状態ですので、サーブレットしか使えません。 表示はフォームに内に書いたものを、再びフォーム内に表示できればよいです。 正直、サンプルは苦し紛れに作ったもので、この問題については全く分かりませんでした。xeno-fieldさんならどう書くか教えてくれませんか?

関連するQ&A