我希望你能帮助我。我试图在StackOverflow中寻找这个问题的解决方案或者类似的问题,但找不到任何问题,所以在这里。
我们必须开发一个我们将有多页表单的功能。填写表单的所有页面后,用户将提交它。问题是最终提交会发送许多参数(大约500个),我们担心在许多情况下我们可能会遇到请求大小问题。
最初的方法是在会话中拥有一个对象,当用户浏览页面时,该对象将被部分填充。即当用户填写第1页中的字段时,会话中的对象部分地填充了该数据,依此类推。这样,我们就不必在每个步骤中传递所有请求参数,并且最终提交不必发送这么多数据。但是我们不想使用这种方法,因为我们不想使用会话来存储特定于单个功能或一堆页面的数据。
另一种方法是在用户填写表单的每个页面后将数据保存到数据库,并在最终提交后检索它,以便我们可以处理整个事情。也许我们可以这样做,但它会延迟项目的开发,因为它不是一项微不足道的任务。
我想知道是否有更好的方法来处理这个问题。也许以某种聪明的方式使用@Cacheable,也许使用Spring WebFlow(我从未使用过),也许是其他我无法想到的选择。我可以使用任何策略或技术吗?目前我们正在使用Spring 3.2。我们也在使用jQuery,以防它相关。
谢谢。
答案 0 :(得分:1)
写作答案,因为我不适合评论:
请求POST请求的正文大小没有限制。仅限GET请求(即,当通过查询参数发送参数时)。这里不用担心。
我不明白为什么你不想使用会话(@SessionAttributes)。拥有多步骤表单是我为此设计的用例之一。
在数据库中存储不完整的模型对象也是一种很好的方法,因为它非常接近REST原则。我们在公司多次使用过这种方式。
如果您不想自己处理所有过渡逻辑,Spring WebFlow也是一种很好的方法。然而,SWF并不是一种简单易学的技术,你应该在努力估算中加入这一事实。
还有另一种方法,我会说越来越受欢迎:在单个网页上动态执行所有逻辑(例如通过AngularJS或某些jQuery plugin)并将结果作为JSON提交对象
如果没有对您的用例和应用程序进行非常具体的说明,那么您的问题就没有明确的答案。即使有详尽的描述,也是关于个人偏好的问题。
@SessionAttributes
。有一些复杂性与之相关(即部分验证和部分绑定)......所以这可能不是最简单的方法。答案 1 :(得分:0)
Spring Webflow将通过其flowScope很好地处理您的用例。
无论如何,我不想经历仅为此集成其基础架构的痛苦,您提到的会话属性将完美地工作,这是一种正确的方法。只是确保在不再需要时将其删除以防止内存泄漏。