アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaBeanを利用してjspを作成したけど
Test.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="*"/>
<html>
<head>
<title>TEST</title>
</head>
<h2>情報の入力</h2>
<form method="GET" action="/javaroad/jspdir/Test_1.jsp">
<p>
名前: <input type="text" name="name" size=30>
<p>
メールアドレス: <input type="text" name="mailaddress" size=30>
<p>
<input type="submit" value="送信">
</form>
</center>
</body>
</html>
Test_1.jspのソース
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="struts.*" %>
<jsp:useBean id="formprocess" class= "struts.FormProcess" scope="application" />
<html>
<head>
<title>TEST</title>
</head>
<body>
<p>
名前: <jsp:getProperty name="formprocess" property="name"/>
<p>
メールアドレス: <jsp:getProperty name="formprocess" property="mailaddress"/>

</body>
</html>
Beanのソース
package struts;

public class FormProcess {
String name;
String mailaddress;

public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setMailaddress(String mailaddress) {
this.mailaddress = mailaddress;
}
public String getMailaddress() {
return mailaddress;
}
}
Test.jspでデータを入力して送信ボタンを押すとTest_1.jspではnullが表示します。前の入力したデータではないです。どうしたらできますか?

A 回答 (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属性の値は、きちんと引用符(")で囲んでおきましょう。(単に忘れていただけだと思いますが、念のため。)
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/12 15:49

自分の思い描いている通りに動作させたいのであれば、以下のように修正します。



Test.jspの上の方にある<jsp:setProperty>アクションを、Test_1.jspの<jsp:useBean>アクションと<html>タグの間に移動する。

本当は以上だけで良いのですが、気付いた点をいくらか。
・Beanのソース内に、引数を持たないpublicなコンストラクタがない。
・同じく、Beanのソース内において、フィールドnameとmailaddressは、プロパティとして使用されているのだから、private修飾子が必要。
・Test.jspやTest_1.jspにおいて、<p>の終了タグがない。
    • good
    • 0

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>の開始タグがない。
くらいですかね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!