- PR -

JSPのフォーム処理について(初心者です)

1
投稿者投稿内容
ドラ
常連さん
会議室デビュー日: 2004/06/24
投稿数: 25
投稿日時: 2004-07-28 17:25
JSPでのフォーム処理について質問なのですが、下記のソースでフォーム内容の編集ボタンを押したときに、入力された内容を編集するページのテキストの中に、一番上の内容しか入りません。下図は画面の内容です。

//////////////////見出しと内容で1セットという風になっています。//////
入力された見出し1
入力された内容1
(編集ボタン)
入力された見出し2
入力された内容2
(編集ボタン)
//////////////////////////////////////////////////////////////////////
この時編集ボタンを押すと、編集画面のフォームの中には、
1の内容が必ず表示されてしまいます。これを2の編集ボタンを押したときには編集画面のフォームの中に2の内容を表示できるようにしたいのですが、うまくいきません。分かりにくい説明で申し訳ございませんが、ご教授いただきたいです。

下記は編集ボタンを押す画面のソースです。
<%@ page contentType="text/html;charset=SHIFT_JIS" import="java.lang.*,java.util.*" %>
<jsp:useBean id="lplan" class="LessonPlan" scope="session" type="LessonPlan" />
<html>
<head>
<title>授業プラン</title>
</head>
<%!
  private int n;
%>
<body>
<h2>授業プラン</h2>
<br>
タイトル:<jsp:getProperty name="lplan" property="title" />
<form method="POST" action="titleedit.jsp">
<input type="submit"name="titleedit" value="編集">
<input type="hidden" name="num" value="<%=n %>">
</form>
<!--- 繰り返し処理 --->
<%
for (n = 0; n < lplan.getItemnumber(); n ++) {
%>
<form method="POST" action="inputitems.jsp">
<input type="submit" value="項目の追加">
<input type="hidden" name="num" value="<%=n %>">
</form>
<form method="POST" action="remove.jsp">
<font size="2"><b><%= lplan.getItemlabel(n) %>:</b></font><BR>
<font size="2"><%= lplan.getItemtext(n) %></font>
<table>
<tr><th>
  <input type="submit"name="remove" value="削除">
<input type="hidden" name="num" value="<%=n %>">
</form>
</th><th>
<form method="POST" action="edit.jsp">
<input type="submit"name="edit" value="編集">
<input type="hidden" name="num" value="<%=n %>">
</form>
</th></tr></table>
<br><br>
<%
}
%>
<form method="POST" action="inputitems.jsp">
<input type="submit" value="項目の追加">
<input type="hidden" name="num" value="<%=n %>">
</form>
<br><br><hr>
<form method="POST" action="view.jsp">
<input type="submit" value=" 登録確認画面へ ">
</form>
</body>
</html>

下記は編集ボタンを押した後の処理のソースです。
<%@ page contentType="text/html;charset=Shift_JIS" import="java.lang.*,java.util.*" %>
<jsp:useBean id="lplan" class="LessonPlan" scope="session" type="LessonPlan" />
<html>
<head>
<%!
private int n;
%>
</head>
<body>
<h1>各項目を編集してください。</h1>
<%
//for (n = 0; n < lplan.getItemnumber(); n ++) {
%>
<form method="POST" action="additems.jsp">
項目の見出し:
<br>
<input type="text" name = "label" size = "50" value="<%= lplan.getItemlabel(n) %>">
<br>
項目の内容:
<br>
<textarea name="text" rows="10" cols="80" />
<%= lplan.getItemlabel(n) %>
</textarea>
<input type="hidden" name="num" value="<%=request.getParameter("num") %>">
<br>
<input type="submit" name="input" value="項目に追加する。">
</form>
<%
// }
%>
<%
lplan.removeItem(Integer.parseInt(request.getParameter("num")));
%>
</body>
</html>
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-07-28 17:41
msoです。

引用:

ドラさんの書き込み (2004-07-28 17:25) より:
JSPでのフォーム処理について質問なのですが、下記のソースでフォーム内容の編集ボタンを押したときに、入力された内容を編集するページのテキストの中に、一番上の内容しか入りません。下図は画面の内容です。

//////////////////見出しと内容で1セットという風になっています。//////
入力された見出し1
入力された内容1
(編集ボタン)
入力された見出し2
入力された内容2
(編集ボタン)
//////////////////////////////////////////////////////////////////////
この時編集ボタンを押すと、編集画面のフォームの中には、
1の内容が必ず表示されてしまいます。これを2の編集ボタンを押したときには編集画面のフォームの中に2の内容を表示できるようにしたいのですが、うまくいきません。分かりにくい説明で申し訳ございませんが、ご教授いただきたいです。

下記は編集ボタンを押す画面のソースです。
〜〜省略〜〜



これはフレームを使っているのでしょうか?
どこに編集画面があるのかわからないのですが・・・・?
別フレームに編集画面があると考えてよろしいですか?


あと、ソースを提示していただけるのは解決しやすくなると
思うのですが、もうちょっと小さくつくったサンプル画面などを
作成してから悩むと解決が早いと思います。

#サンプルが作れないのであれば、相談はありだと思います。
EAST
会議室デビュー日: 2004/07/27
投稿数: 4
投稿日時: 2004-07-28 18:05
ちょっとよくわからないのですが、こんな感じでしょうか?

sessionにlplanという名前でLessonPlanというBeanがあるんですよね?
ラベルと内容をセットでリスト形式を持っていて
index番号を渡すと、該当のラベルや内容を取得できるメソッドも用意されているということで良いでしょうか?

このとき2番目の内容を編集したい場合はgetItemlabel()に1を渡さなければならないはずですが
lplan.getItemlabel(n)このnが常にゼロになっているために、1番目の内容しか取得できないのではありませんか?
編集ボタンを押した後の処理の
変数nを確認してみてください。

使用したいindex番号はrequest.getParameter("num")ですよね?
ウッドストック
会議室デビュー日: 2004/07/28
投稿数: 1
投稿日時: 2004-07-28 19:39
終了タグ</textarea>

<textarea name="text" rows="10" cols="80" />
                              ~~~~
の共存は問題ないですか?
ドラ
常連さん
会議室デビュー日: 2004/06/24
投稿数: 25
投稿日時: 2004-07-28 21:33
書き込みありがとうございます。
ウッドストックさん>
終了タグについては問題はありませんでした。
EASTさん>
変数Nを確認したところ、変数は0しか渡されていませんでした。
この場合、削除ボタンへも同様に変数を渡しているのですが、削除ボタンのほうは、変数がちゃんと渡されていて、各項目を削除できるのですが、なぜか編集ボタンの方は、変数が渡されていないようです。
mesさん>
アドバイスありがとうございます。小さなサンプルを作成して見たのですが、一つ目の編集はできるのですが、2つ目の編集をしようとすると、変数に値がはいっていないのか、1つ目の編集項目がフォームに入ってしまっています。


EAST
会議室デビュー日: 2004/07/27
投稿数: 4
投稿日時: 2004-07-29 16:21
こんにちは。
未解決のままなのでしょうか?

変数nがなぜいつもゼロなのか考えてみてください。
リクエストから欲しいindex番号を取り出すことはできていますよね。
値を確認してみてください。
それをintにして変数nに入れれば良いだけではないでしょうか??

どこまでは思うとおりに動いているか、どこからが予想外なのかは
大概変数の中身を追いかければ、自ずと答えは出ますので
ソースを提示しなくても良くなると思います。頑張ってください。

ちょっと気になったのですが
ウッドストックさんがご指摘されている終了タグについて、
なぜ「問題はありませんでした」なのでしょうか?

他にもhtmlとして間違いが見受けられました。
・編集ボタン(submit)のname属性の前にスペースがない
・tableの前に始まったformがtableの途中で閉じられている

こういうこともブラウザによっては原因requestから値が取れない原因になると思います。
1

スキルアップ/キャリアアップ(JOB@IT)