处理Spring中的巨大形式

时间:2014-06-20 07:42:30

标签: forms spring spring-mvc

我希望你能帮助我。我试图在StackOverflow中寻找这个问题的解决方案或者类似的问题,但找不到任何问题,所以在这里。

我们必须开发一个我们将有多页表单的功能。填写表单的所有页面后,用户将提交它。问题是最终提交会发送许多参数(大约500个),我们担心在许多情况下我们可能会遇到请求大小问题。

最初的方法是在会话中拥有一个对象,当用户浏览页面时,该对象将被部分填充。即当用户填写第1页中的字段时,会话中的对象部分地填充了该数据,依此类推。这样,我们就不必在每个步骤中传递所有请求参数,并且最终提交不必发送这么多数据。但是我们不想使用这种方法,因为我们不想使用会话来存储特定于单个功能或一堆页面的数据。

另一种方法是在用户填写表单的每个页面后将数据保存到数据库,并在最终提交后检索它,以便我们可以处理整个事情。也许我们可以这样做,但它会延迟项目的开发,因为它不是一项微不足道的任务。

我想知道是否有更好的方法来处理这个问题。也许以某种聪明的方式使用@Cacheable,也许使用Spring WebFlow(我从未使用过),也许是其他我无法想到的选择。我可以使用任何策略或技术吗?目前我们正在使用Spring 3.2。我们也在使用jQuery,以防它相关。

谢谢。

2 个答案:

答案 0 :(得分:1)

写作答案,因为我不适合评论:

  • 请求POST请求的正文大小没有限制。仅限GET请求(即,当通过查询参数发送参数时)。这里不用担心。

  • 我不明白为什么你不想使用会话(@SessionAttributes)。拥有多步骤表单是我为此设计的用例之一。

  • 在数据库中存储不完整的模型对象也是一种很好的方法,因为它非常接近REST原则。我们在公司多次使用过这种方式。

  • 如果您不想自己处理所有过渡逻辑,Spring WebFlow也是一种很好的方法。然而,SWF并不是一种简单易学的技术,你应该在努力估算中加入这一事实。

  • 还有另一种方法,我会说越来越受欢迎:在单个网页上动态执行所有逻辑(例如通过AngularJS或某些jQuery plugin)并将结果作为JSON提交对象

如果没有对您的用例和应用程序进行非常具体的说明,那么您的问题就没有明确的答案。即使有详尽的描述,也是关于个人偏好的问题。

  • 如果您的整体应用程序架构将以这种方式设计,那么单一动态页面方法(例如AngularJS)将会很好。
  • 如果您熟悉该技术或者您计划在整个应用程序中使用更多的多步骤表单,那么Spring WebFlow会很好(例如,如果我只需要解决一个用例,我就不会选择SWF )。
  • 如果我需要快速解决单个多步骤表单,我可能会选择@SessionAttributes。有一些复杂性与之相关(即部分验证和部分绑定)......所以这可能不是最简单的方法。

答案 1 :(得分:0)

Spring Webflow将通过其flowScope很好地处理您的用例。

无论如何,我不想经历仅为此集成其基础架构的痛苦,您提到的会话属性将完美地工作,这是一种正确的方法。只是确保在不再需要时将其删除以防止内存泄漏。