Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存多级jsp表单的数据_Java_Forms_Jsp_Servlets - Fatal编程技术网

Java 保存多级jsp表单的数据

Java 保存多级jsp表单的数据,java,forms,jsp,servlets,Java,Forms,Jsp,Servlets,在我的应用程序中,我有许多不同的JSP表单,它们有多个阶段,即在每个阶段之后,请求被发送到Servlet并进行处理以生成下一个表单。 问题是,我需要保持这些表单的状态(比如在JSF中,它是自动完成的),这样用户就不必在每次进入错误页面或导航返回以重新输入他想要更改的内容时输入所有数据 最佳方法是什么: 1) 将所有数据存储在会话中,并在用户提交表单的最后阶段后将其删除。 2) 将其全部存储在请求范围中,并在用户每次导航到不同页面时进行读/写操作。但是,这似乎不符合逻辑,因为如果我保存阶段1并在阶

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

最佳方法是什么:
1) 将所有数据存储在会话中,并在用户提交表单的最后阶段后将其删除。

2) 将其全部存储在请求范围中,并在用户每次导航到不同页面时进行读/写操作。但是,这似乎不符合逻辑,因为如果我保存阶段1并在阶段4中需要它的数据,我必须读/写3次,而不是在使用会话范围时只读/写1次,并且每次要读/写的数据量都会增加。

会话范围应该可以


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

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

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


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

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

  • 如果您需要在每个步骤之后进行计算,并且需要以任何方式将数据发送到服务器,会话会更好

  • 如果客户端使用大量Javascript,则可以收集所有数据并仅在最后一步之后发送。只有当步骤不依赖于输入的数据时,这才有效


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

在我的应用程序中,我无法在客户端处理所有处理,因为每个表单提交都会遵循DB查询,下一个表单中的数据取决于我从DB获得的数据。我想我将主要使用会话方法。