某些表格太复杂,无法将它们放在一页上。例如,如果表单涉及大量结构化数据,例如在地图上选择位置、在日历小部件中安排事件,或者根据之前的输入使表单的某些部分发生变化,那么能够将某个表单拆分为多个页面。
这对于动态网页和 Javascript 很容易做到,因为只需创建一个带有不同页面的选项卡小部件,实际提交的表单将包含整个选项卡小部件及其所有输入字段,从而POST
为整个操作产生一个请求.
但是,有时生成某些输入字段需要很长时间;即使在页面生成之后,它们甚至可能是计算密集型的,对低端计算机用户的浏览器造成负担。此外,创建根据早期输入自行调整的表单变得困难或不可能。
因此,有必要将某个表单拆分为多个整页请求。
这可能很困难,特别是因为表单的第一页将POST
发送到/location/a
,这将发出重定向到客户端/location/b
并请求GET
客户端。将存储的表单数据从POST /location/a
to传递GET /location/b
是困难所在。
Spring Web Flow(Spring 框架的一个子项目,以其依赖注入功能而闻名)的创建者 Erwin Vervaet 曾经写过一篇博客文章,演示了该框架中的此功能,并将其与实现类似功能的 Lift Web 框架进行了比较. 然后他提出了对其他 Web 框架的挑战,这将在后面的文章中进一步描述。
Yesod 将如何面对这个问题,尤其是考虑到它基于 REST 的无状态特性?