
サーブレットを使用して画面Aでリストで選択した項目を別のページ画面Bで出力する画面を作成しています。
今、詰まっているのですが、その画面Bから画面Aに戻るときに画面Bで表示されている項目が画面Aで選択されている状態で表示して、リセットボタンを押すと、デフォルト(奈良)に戻るようにしたいのですが、以下のプログラムですと、セッションで値を受け取っているとリセットを押すとデフォルトにはならずに、以前選んでいた項目が表示されてしまいます。解決法をご教授ください。以下のソースは画面Aを表示するためのものです。
HttpSession hs=request.getSession(true);
String city = (String)hs.getAttribute("city");
String nara="";String osaka ="";String kyoto ="";String kobe ="";
if(city != null){
if(city.equals("osaka")){osaka = "selected";
}else if(city.equals("kyoto")){kyoto = "selected";
}else if(city.equals("kobe")){kobe = "selected";
}
}
out.println("<html><head><title>Sessionを使う</title></head><body><br><br><center><br>");
out.println("<form action=response.encodeURL(\"TestSession\") method=POST>");
out.println("<select name=city");
out.println("<option value=nara "+ nara +">奈良");
out.println("<option value=osaka "+ osaka +">大阪");
out.println("<option value=kyoto "+ kyoto +">京都");
out.println("<option value=kobe "+ kobe +">神戸");
out.println("</select>");
out.println("<input type=submit value=送信>");
out.println("<input type=reset value=リセット></form>");
out.println("</center></body></html>");
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
まず、<input type="reset">の機能について、理解される必要があると思います。
<input type="reset">は、「フォームの内容を、HTMLがロードされた状態に戻す」機能を果たすボタンです。
JSPでは、JSPが処理され、出力された後の状態のHTMLに戻るということです。
つまりご質問のコードでいうと、画面表示がすべて終わった後、ブラウザでソースコードを開いて「selected」になっている項目が「HTMLがロードされた状態」であり、resetボタンを押すとそこへ戻ります。
コードではセッションの値に基づいてselectedなものを決めているため、大阪がselectedとして出力されれば、resetボタンを押すと大阪に戻ります。
<input type="reset">を使ってリセットしようとする限りは、これはどうしようもありません。
解決するには、既にご回答があるようにJavaScriptを使うか、いったんリクエストをとばすしかないでしょう。
No.2
- 回答日時:
戻るという動作が必要であれば、A画面とB画面の間もう一つの画面を入れたらどうでしょうか(確認のため)セッションへの保存は確認画面で行えばうまくいくと思いますが。
。。No.1
- 回答日時:
(1)JavaScript を使ってクライアント側で処理する
<head></head> の中に以下を追加します。
out.println("<script type=text/javascript>");
out.println("function reset(){");
out.println("document.forms[0].city.options[0].selected=true }");
out.println("</script>");
あと、リセットボタンは以下のようにします。
out.println("<input type=button value=リセット onclick=reset()></form>");
ただ、この方法はあまり良いとはいえません。
スクリプト言語を書く場合は、せめてJSP化しましょう。
(2)リセットボタンを押したときにsubmit する。
そして、その場合にHTMLの出力内容を変えるのです。
out.println("<option selected value=nara "+ nara +">奈良");
とすればOKです。
欠点は、サーバーに一度送信する為、軽快ではないという点です。
ほかにもやりようによっては色々工夫できると思いますので、研究してみてはいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
JavaにはなぜGO TO ...
-
cookie使用サイトへのJAVAによ...
-
標準入力をするメソッドを作り...
-
「続行するには何かキーを押し...
-
IF関数でEmpty値を設定する方法。
-
ORA-01858: 数値を指定する箇所...
-
ループ処理の際、最後だけ","を...
-
System.err. printlnとSystem.o...
-
System.exit()の値を取得したい
-
動的配列が存在(要素が有る)か...
-
カタカナの小文字を大文字に変...
-
javaで質問です。 文字列2023/2...
-
1~100までの数字を表示したい
-
【C#】ハッシュテーブル(連想...
-
streamで送信されたArrayListを...
-
0dの意味を教えてください
-
VBAで配列の計算
-
[Ljava.lang.Stringってなんですか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
[JAVA]try 内の変数を外で!?
-
EclipseでJava
-
JAVAのDouble型の小数点以下の...
-
文字列の引き算
-
JAVA 文字色変更
-
「続行するには何かキーを押し...
-
nullcline
-
"add"とは?f
-
JavaにはなぜGO TO ...
-
java int integer
-
JAVAのエラーの意味が分かりま...
-
LC発振回路-ループ利得
-
vb6 オブジェクトライブラリは...
-
String#matchesメソッドが環境(...
-
java教えてください。
-
javaで判別式のプログラミング...
-
エクセルマクロ文で、赤文字セ...
-
DOMで要素の値がNULL
おすすめ情報