1

サーブレット (page1) に以下のコードがあり、[保存] を押して 2 番目のサーブレット (page2) に移動し、page1 の形式で記述されたコンテンツを読み取り、次のようにラジオ グループに追加します。

Question [i]: question  (i increases every time a question is added in page2)
radiobutton1 (radio1)
radiobutton2 (radio2)
radiobutton3 (radio3)

ポイントは、以下のフォームに入力するたびに、以前に保存されたデータの下にデータが追加されることです。

サーブレット page2 のサンプル コードを教えてください。

どうもありがとう。

out.println("<form  id=\"form1\" action = \"page2\" method = \"POST\" >");            
        out.println("<input type=\"text\" name=\"question\"><br />");
        out.println("<input type=\"text\" name=\"radio1\"><br />");
        out.println("<input type=\"text\" name=\"radio2\"><br />");
        out.println("<input type=\"text\" name=\"radio3\"><br />");
        out.println("<input type = \"submit\" value = \"Save\">");
4

1 に答える 1

2

またはセッションスコープのいずれかを使用<input type="hidden">して、以前に保存したデータを記憶できます。例えば

<input type="hidden" name="question1answer" value="42" />

また

request.getSession().setAttribute("question1answer", 42);

渡されたデータは、次のように利用可能な後続のリクエストです。

String question1answer = request.getParameter("question1answer");

また

Integer question1answer = (Integer) request.getSession().getAttribute("question1answer");

非表示の入力の欠点は、かなりの定型コードが生成され、エンドユーザーがそれを簡単に推測/操作できることです。セッションスコープの欠点は、同じセッション内のすべてのリクエストで共有されることです(したがって、エンドユーザーが複数のブラウザウィンドウ/タブで同じページを開いている場合に干渉する可能性があります)。両方の長所を組み合わせるために、最初のリクエストで長くて一意のキーを生成できます。このキーをキーとして使用して、関連するすべてのデータをセッションスコープに格納し、そのキーを非表示のリクエストパラメータとして渡します。

例:最初のリクエスト

String key = UUID.randomUUID().toString();
request.setAttribute("key", key);
List<Answer> answers = new ArrayList<Answer>();
request.getSession().setAttribute(key, answers);
// ...
answer.add(question1answer);

とHTMLで

<input type="hidden" name="key" value="${key}" />

その後のすべてのリクエストで

String key = request.getParameter("key");
request.setAttribute("key", key);
List<Answer> answers = (List<Answer>) request.getSession().getAttribute(key);
// ...
answers.add(question2answer); // question3answer, question4answer, etc.
于 2013-01-14T15:17:41.807 に答える