gpt4 book ai didi

java - 如何记住之前保存的表单数据以供后续请求

转载 作者:行者123 更新时间:2023-11-30 04:32:30 24 4
gpt4 key购买 nike

我在 servlet (page1) 中有下面的代码,我想在按“保存”后转到第二个 servlet (page2),读取以 page1 形式编写的内容并将它们附加到单选组中,如下所示:

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

重点是每次我填写下面的表格时,数据都会添加到之前保存的数据下面。

您能为 servlet 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\">");

最佳答案

您可以使用 <input type="hidden">或记住以前保存的数据的 session 范围。例如

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

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

传递的数据是后续请求可用的

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

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

隐藏输入的缺点是它会产生相当多的样板代码,并且最终用户可以轻松猜测/操纵它。 session 范围的缺点是它在同一 session 中的所有请求之间共享(因此当最终用户在多个浏览器窗口/选项卡中打开相同页面时可能会产生干扰)。为了结合两全其美,您可以在第一个请求时生成一个长且唯一的 key ,将其用作在 session 范围中存储所有关联数据的 key ,并将该 key 作为隐藏请求参数传递。

例如在第一个请求中

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.

关于java - 如何记住之前保存的表单数据以供后续请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com