2

在我的应用程序中,我有许多不同的具有多个阶段的 JSP 表单,即在每个阶段之后,请求被发送到 Servlet 并被处理以生成下一个表单。问题是我需要保持这些表单的状态(比如在 JSF 中自动完成),这样用户就不必每次进入错误页面或导航回重新输入时输入所有数据他想要改变的东西。

最好的方法是什么:
1)将所有数据存储在会话中,并在用户提交表单的最后阶段后将其删除。
2)将其全部存储在请求范围内,并在每次用户导航到不同页面时进行读/写。但是,这似乎不合逻辑,因为如果我保存第 1 阶段并在第 4 阶段需要它的数据,我必须在使用会话范围时读取/写入 3 次而不是仅 1 次,并且每次数据量是读/写增加。

4

3 回答 3

3

会话范围应该没问题

请记住,会话通常存储在内存中,因此在非常繁忙的网络服务器上它可能会占用大量内存。

于 2012-06-18T15:22:58.660 回答
1

您应该在客户端处理表单的步骤。并将所有值一起发送。这将为您节省大量关于会话值的工作。

为每个步骤创建一个 div,用表单标签包装它们,显示 - 相应地隐藏 div。此外,如果您使用 jquery,则选择 dom 元素会容易得多。

如果您必须在服务器端进行查询,那么显而易见的选择是会话值,假设您不想使用 AJAX,也不想使用 JSON。

于 2012-06-18T15:26:05.563 回答
1

两者都是可行的,这取决于您的用例。

  • 如果您需要在每一步之后进行计算并且无论如何都需要将数据发送到服务器,那么 session 会更好。

  • 如果客户端是 Javascript 繁重的,您可以收集所有数据并仅在最后一步之后发送。这仅在步骤不依赖于输入的数据时才有效。

如果您选择会话方法,请注意在用户在多个选项卡中打开您的应用程序时使其正常工作。这可以通过检测会话中已经存在的会话属性,或者以不会导致冲突的方式命名属性来完成。

于 2012-06-18T15:29:11.663 回答