プロが教える店舗&オフィスのセキュリティ対策術

サーブレットを使用して画面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件)

まず、<input type="reset">の機能について、理解される必要があると思います。



<input type="reset">は、「フォームの内容を、HTMLがロードされた状態に戻す」機能を果たすボタンです。
JSPでは、JSPが処理され、出力された後の状態のHTMLに戻るということです。

つまりご質問のコードでいうと、画面表示がすべて終わった後、ブラウザでソースコードを開いて「selected」になっている項目が「HTMLがロードされた状態」であり、resetボタンを押すとそこへ戻ります。
コードではセッションの値に基づいてselectedなものを決めているため、大阪がselectedとして出力されれば、resetボタンを押すと大阪に戻ります。
<input type="reset">を使ってリセットしようとする限りは、これはどうしようもありません。

解決するには、既にご回答があるようにJavaScriptを使うか、いったんリクエストをとばすしかないでしょう。
    • good
    • 0

戻るという動作が必要であれば、A画面とB画面の間もう一つの画面を入れたらどうでしょうか(確認のため)セッションへの保存は確認画面で行えばうまくいくと思いますが。

。。
    • good
    • 0

(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です。
欠点は、サーバーに一度送信する為、軽快ではないという点です。

ほかにもやりようによっては色々工夫できると思いますので、研究してみてはいかがでしょうか。
    • good
    • 0

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