我正在尝试在Play 2.0.3中实现一些流控制,这是一个包含几个步骤的向导。 Play中最好的方法是什么?
我希望有多步流程,例如 step1 - > step2 - >完成
主要问题是不允许用户跳过例如step2并直接完成(用户可以在浏览器 / finish 中手动输入链接)。
感谢。如果我没有很好地解释自己,请告诉我。
答案 0 :(得分:4)
您至少有两个选择:
答案 1 :(得分:2)
完全无状态的方式可能是将所有数据存储在步骤的网址中,其中步骤n + 1
包含步骤n
中的所有数据:
GET /step1 controllers.Application.step1
GET /step2 controllers.Application.step2(dataFromStep1)
GET /step3 controllers.Application.step3(dataFromStep1, dataFromStep2)
POST /finish controllers.Application.finish
此解决方案的优点在于其简单性以及在Play执行下一步之前检查所有必需步骤是否已完成的事实!路由器。
但是,如果您的网址数量很多,那么这个解决方案的适用性会降低。在这种情况下,您需要:
/step2
网址不会为不同的用户返回相同的内容; 答案 2 :(得分:1)
我会将步骤存储在数据库中(长期)或缓存(短期内)。这样您就可以构建一些逻辑if (secondQuestionAnswered) { .. }
,并确保您的用户没有跳过任何内容和/或用户可以在他想要的时候完成这些步骤。如果您的应用程序增长并且您需要扩展它,那么持久保存在数据库或缓存中也会受益。