在我的应用程序中,我有许多不同的具有多个阶段的JSP表单,即在每个阶段之后将请求发送到Servlet并处理以生成下一个表单。 问题是我需要保持这些表单的状态(比如在JSF中自动完成),这样用户每次进入错误页面或导航回到重新输入时都不必输入所有数据他想改变的东西。
最佳方法是什么:
1)将所有数据存储在会话中,并在用户提交表单的最后阶段后将其删除
2)将它们全部存储在请求范围内,并在每次用户导航到不同页面时进行读/写。但是,这似乎不符合逻辑,因为如果我保存第1阶段并且需要第4阶段的数据,我必须在使用会话范围时读取/写入3次而不是仅仅1次,并且每次都需要数据量读/写增加。
答案 0 :(得分:3)
会话范围应该没问题
请记住,会话通常存储在内存中,所以在非常繁忙的Web服务器上它会占用大量内存。
答案 1 :(得分:1)
您应该在客户端处理表单的步骤。并将所有值一起发送。这将为您节省大量关于会话值的工作。
为每个步骤创建一个div,用form标签包装它们,show - 相应地隐藏div。如果你使用jquery,选择dom元素会容易得多。
如果你必须在服务器端进行查询,那么显而易见的选择是会话值,假设你不想使用AJAX,也不想使用JSON。
答案 2 :(得分:1)
两者都是可行的,这取决于你的用例。
如果您需要在每个步骤之后进行计算并且需要将数据发送到服务器,那么会话就更好了。
如果客户端Javascript很重,您可以收集所有数据,只在最后一步之后发送。只有当步骤不依赖于输入的数据时,这才有效。
如果您选择会话方法,请在用户在多个标签页中打开您的应用时小心。这可以通过检测会话中已有的会话属性,或以不会导致冲突的方式命名属性来完成。