2012-11-07 106 views
2

我想在Play 2.0.3中實現一些流程控制,這種類型的嚮導有幾個步驟。 Play中最好的方法是什麼?在遊戲中的多步驟流程

我想擁有多步流動,像步驟1 - >步驟2 - >完成

的主要問題是不允許用戶跳過例如步驟2和直行完成(用戶可以手動輸入瀏覽器中的鏈接/完成)。

謝謝。如果我沒有很好地解釋我自己,請告訴我。

回答

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免費執行!路由器。

但是,如果您有大量數據,您的網址將非常龐大,從而使此解決方案不太適用。在這種情況下,您需要:

  • 將每個步驟的數據保存到永久存儲器(使用會話是另一個選項,但大小限制爲4KB);
  • 識別您的用戶,例如對於不同的用戶,/step2 URL不會返回相同的內容;
  • 設置超時以放棄不完整的提交併清理持久性存儲;
  • 手動檢查您的業務代碼,所有步驟已完成最終提交。
+0

我認爲將註冊數據存儲在URL中不是一個好主意,是嗎?我應該使用哪個應用程序塊設置超時以放棄不完整的提交併清理持久性存儲? – Temak

+1

只要您使用https,請在URL或請求正文中存儲合理的數據(請參閱[本問題](http:// stackoverflow。COM /問題/ 499591 /是-HTTPS的網址加密/ 499594))。 –

3

您至少有兩種選擇:

  • 使用POST方法發送步驟之間的數據,將使用總是相同的URL,如果用戶將刷新頁面,他將返回到第一步。您的步驟標識符將只是隱藏的表單字段。
  • 使用jQuery來顯示下一步,您甚至不需要在步驟之間向服務器發送數據。你可以構建一個大表單(如果是表單)並用jQuery顯示/隱藏它的部分。在完成後,您將執行常見表單的提交,其中包含所有步驟,您可以驗證並顯示「謝謝」頁面。
  • (可選)您可以使用jQuery與jQuery分離驗證和保存步驟。
1

我會將步驟存儲在數據庫(長期)或緩存(短期)。這樣,您可以構建一些邏輯if (secondQuestionAnswered) { .. }並確保您的用戶沒有跳過任何內容,並且/或者用戶可以在他想要的時候完成這些步驟。如果您的應用程序增長並且需要擴展,則堅持數據庫或緩存也會有所收益。

+0

您不希望數據庫中存在不完整/不一致的數據。 –