2011-09-15 11 views
1

私はJSPを書く初心者です。 selectboxesの一つでJSPセッションの問題

私のJSPでは、私は動的に選択ボックス でフォームを作成している(つまり、これらのフィールドはHTMLではない)

は、私は、パラメータと再として値を渡すのonchange方法を実装しました - フォームを表示します。フォームが再表示されると、渡されたパラメータが、外部XMLファイルを使用して、パラメータの値に従って別の選択ボックスの値を設定します。

1つの問題は、現在のページが再送信され、再ロードされた後、他のフィールド(約10個のフィールド)の選択値が失われるという点です。

現在、この問題を解決するために、セッションを使用して次の方法を使用しています。 onchangeメソッドでは、javascriptを使用して選択した値をロードし、それらをGETリクエストでサーブレットにパラメータとして渡します。サーブレットでは、セッションでパラメータとセット属性を受け取ります。

JSPでは、セッションでgetAttributesを使用し、フォームの動的作成時に選択した値を変更します。

これを行うための多くのフィールドを作成する必要があるため、これを行う簡単な方法があるのだろうかと思います。また、私はこのケースではdatabeanを使用しませんでした。

フィールドの動的作成はJavaロジックを使用しているため、ajaxを使用できないことは本当ですか?

私のデザインの品質について教えてください。私はMVCデザインパターンに真実を残していますか?

答えて

1

私は間違っていないよ場合は、あなたの全体の質問は基本的に次まで(控えめ)を沸騰:

私はドロップダウンの束を持つフォームを持っています。私はドロップダウンのonchange中にフォームを提出しています。送信後に他のすべてのドロップドウの選択された値を保持するにはどうすればよいですか?

はい?

OK、ドロップダウンオプションの値が送信されたリクエストパラメータの値と一致するたびにselected属性を設定するだけです。以下の例では、${fooOptions}としてMap<String, String>をしたことを前提としています

<select name="foo"> 
    <c:forEach items="${fooOptions}" var="fooOption"> 
    <option value="${fooOption.key}" ${fooOption.key == param.foo ? 'selected' : ''}>${fooOption.value}</option> 
    </c:forEach> 
</select> 

あなたが参照していますか?フォームが送信されると、名前が"foo"のドロップダウンの現在選択されているオプションがリクエストパラメータとして送信され、サーバ側でリクエストパラメータ${param.foo}として利用可能になります。オプションを動的に生成している間は、オプションの値が要求パラメータの値と等しいかどうかを確認し、そうであればselected属性を設定するだけです。

これはセッションなどとは関係ありません。それらは、ログイン、プリファレンス、ショッピングカートなど現在の訪問者を対象にして、異なる目的を果たします。フォーム値の格納には使用しないでください。同じセッションで複数のブラウザウィンドウやタブが開いている場合にのみ競合します。

JavaScriptは、ajaxの魔法を使いたい場合にのみ役立ちます。しかし、私はそれがあなたのための唯一の急な学習曲線だと思います。おそらく後で。いずれにしても、この回答にはいくつかのキックオフの例があります。How to use Servlets and Ajax?

+0

ありがとうございました! 私はあなたが私に大きな洞察を提供すると思います。 私は現在、document.location = servlet?parameter1 = parameter1のようなコードを使用するonchangeメソッドのjavascriptを使用していますので、 はフォームを再作成するのではなくフォームを送信していますか?それとも同じですか? オンチェンジ中にフォームを送信しない場合は、この方法で選択した値を保持できますか? – vincentlcy

+0

リダイレクトされたURLのリクエストパラメータとして選択した値を含めると、同様にうまく動作します。 – BalusC