[英]How to implement flow control in Play?
我們正在嘗試在Play中實現一些流控制,這是一個包含多個步驟的向導。 在Play中最佳做法是什么?
我們的要求:
我們遇到的問題是,流程中的任何單個步驟都不知道下一步應該重定向到哪里,並且由於Play會話非常簡單,因此在此無濟於事。
這是我們目前擁有的解決方案:
@OneToMany public List<FlowStep> flowSteps
在用戶對象中的數據庫中存儲Flow步驟 該解決方案的缺點是什么? 有沒有更好的方法(可能是一些Play內置方法)來改進它?
您想要的是一個有限狀態機 。 要實現它,您需要一個知道步驟之間所有可能轉換的類。 然后,您可以為其提供當前步驟和任何相關輸入,它將返回輸出(其中輸出是下一個要呈現的視圖)。
然后,使用render重定向用戶,如下所示:
render("my/view/path.html", myparams);
這不是唯一的選擇,並且過渡的存儲將取決於您需要它們的復雜程度(可以為簡單的場景進行硬編碼,也可以為更復雜的場景存儲在數據庫中),但是它應該可以工作。
由於Play是無狀態的,因此您需要將信息保存在數據庫中(對於復雜的場景,您需要考慮幾個步驟的信息),或者,如果相關的觸發器只是少數,則將其存儲在cookie本身中。
當您將狀態機耦合到控制器時,我會避免使用@ Before / @ After。 理想情況下,您希望它們是獨立的,狀態機僅返回轉換,您可以稍后將其轉換為視圖路徑。 這將簡化變化的過渡。
如果情況不是非常復雜,我什至不用費心將它們存儲在數據庫中。 如果您希望它可重用且非常靈活,請執行此操作,否則僅“對其進行硬編碼”可能會更簡單。
您是否在Play文檔中檢查了此部分(快速閱讀):
http://www.playframework.org/documentation/1.2.4/model#stateless
它列出了您所要求的選項。
您可以嘗試將“ 播放緩存”機制用作偽會話來存儲經過驗證的步驟,而不是在數據庫中進行處理。 使用播放緩存將是一個更簡單的解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.