• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jspから別のjspへパラメータが送信できない)

jspから別のjspへパラメータが送信できない

このQ&Aのポイント
  • jspから別のjspへパラメータが送信できない原因と解決方法を教えてください
  • Test.jspでデータを入力して送信ボタンを押すとTest_1.jspでnullが表示されます。前の入力したデータが表示されない問題の解決方法を教えてください
  • javaBeanを利用してjspを作成し、Test.jspからTest_1.jspにデータを送信する際にパラメータが正しく渡されない問題が発生しています。解決方法を教えてください

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

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

#2の修正では分かりづらいようでしたら、以下のようにする方法もあります。 Test.jspを、以下の2つのファイルTest.htmとTransfer.jspに分ける。 <!-- Test.htmのソース --> <html> <head> <title>TEST</title> </head> <body> <center> <h2>情報の入力</h2> <form method="GET" action="/javaroad/jspdir/Transfer.jsp"> <p> 名前: <input type="text" name="name" size="30"> </p> <p> メールアドレス: <input type="text" name="mailaddress" size="30"> </p> <input type="submit" value="送信"> </form> </center> </body> </html> <!-- Transfer.jspのソース --> <%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="struts.*" %> <jsp:useBean id="formprocess" class= "struts.FormProcess" scope="application" /> <jsp:setProperty name="formprocess" property="*"/> <jsp:forward page="./Test_1.jsp" /> このようにする事で、Test.htmから送信されたパラメータがTransfer.jspヘ行き、そこでBeanにsetされた後、すぐにTest_1.jspに遷移する、といった感じになります。(ただ、このようにすると、<jsp:forward>アクションが必要になってきたりするので、それならば、やはり#2のように、Transfer.jspの部分をTest_1.jspの上の方に記述した方がいいと思うのですが…。) 質問の中にあったTest.jspでは、なぜいけなかったのかというと、このjspファイルを実行する時点では、まだ「名前:」や「メールアドレス:」のテキストフィールド内に、どのようなデータが入力されているのか分からないために、Beanにsetしようにもできないわけですね。だから、<jsp:setProperty>アクションなどは、「送信」ボタンを押した後に遷移する画面上で、処理するようにしておかないといけない、というわけです。 その他にも、気付いた点をいくつか。 ・Beanのソースについては、java.io.Serializableインターフェイスをインプリメントしておきましょう。 ・Test.jspについて、<input>の中のsize属性の値は、きちんと引用符(")で囲んでおきましょう。(単に忘れていただけだと思いますが、念のため。)

jch
質問者

お礼

ありがとうございます。 うまく動きました、

その他の回答 (2)

回答No.2

自分の思い描いている通りに動作させたいのであれば、以下のように修正します。 Test.jspの上の方にある<jsp:setProperty>アクションを、Test_1.jspの<jsp:useBean>アクションと<html>タグの間に移動する。 本当は以上だけで良いのですが、気付いた点をいくらか。 ・Beanのソース内に、引数を持たないpublicなコンストラクタがない。 ・同じく、Beanのソース内において、フィールドnameとmailaddressは、プロパティとして使用されているのだから、private修飾子が必要。 ・Test.jspやTest_1.jspにおいて、<p>の終了タグがない。

回答No.1

Test.jspの[送信]ボタンで直接Test_1.jspにGET要求出してるからですね。 このときはまだ誰もFormProcessクラスのインスタンスを生成していないので、 Test_1.jspが表示時にインスタンスを生成します。 ↑にはもちろんTest.jspで入力された値がセットされているわけないので、 getメソッドを呼んでもnullが返ります。 単にTest.jspで入力した文字を表示したいだけなら、 Test_1.jspでリクエストから値を取得して表示すればできるでしょう。 (FormProcessクラス使ってないですけど。(笑)) っていうかStruts?を使っているのなら、Strutsのお約束に従った方がいいのでは…。 その他気になったのは Test.jsp ・<body>の開始タグがない。 ・<center>の開始タグがない。 くらいですかね。