2 つの Webflow を持つ Grails アプリケーションがあります。
- 購入用の 1 つ
- 私たちと連絡を取るための別の
問題:
ユーザーが購入ウィザードで (Webflow を介して) いくつかの手順を実行した後、質問があると判断し、(Webflow を介して) 当社に連絡しようとする場合があります。そのため、ユーザーはナビゲーション メニューの [お問い合わせ] リンクをクリックしますが、購入フローの最後のステップに戻ります。個人的には、すべてのリンクが後置されるセッションの「実行」キーに関係していると思います
...../contact_us/index?execution=e1s1
私が望む解決策:
(上記の場合)ユーザーが「購入フロー」から「お問い合わせフロー」に切り替えることを決定した場合、「購入フロー」が無効化/削除され、ユーザーが「お問い合わせの流れ』です。
Grails バージョン 2.2.3 Webflow プラグイン: 2.0.8.1
試みられた解決策
私が思いついた最善の解決策は (あまりにも醜いことをせずに)、リンクがクリックされて新しいフローが開始されたときにインターセプトし、他のフローを削除しようとするフィルターを作成することでした。ただし、この例では、驚くべきことに、フロー リポジトリ (nullpointer) でフローを見つけることができません。
FlowExecutionLock flowExecutionLock = null;
SessionBindingConversationManager conversationManager = applicationContext.getBean('conversationManager');
DefaultFlowExecutionRepository flowExecutionRepository = applicationContext.getBean("flowExecutionRepository");
try {
String executionKey = params.get("execution");// executionKey is something like 'e1s1'
FlowExecutionKey flowExecutionKey = flowExecutionRepository.parseFlowExecutionKey(executionKey);
flowExecutionLock = flowExecutionRepository.getLock(flowExecutionKey);
flowExecutionLock.lock();
FlowExecution execution = flowExecutionRepository.getFlowExecution(flowExecutionKey);
flowExecutionRepository.removeFlowExecution(execution);
} catch (FlowExecutionRepositoryException e) {
log.warn("Could not find flow in repository with id ${executionKey} " + e.getMessage());
} catch (NullPointerException e) {
log.warn("Could not find flow in repository with id ${executionKey} " + e.getMessage());
} finally {
if (flowExecutionLock != null) {
flowExecutionLock.unlock();
}
}
アイデア?
どうすればこれを行うことができるか、誰かがアイデアを持っていますか。セッション内の 2 つのフロー (一方が不完全な場合) の間で交換できるはずですよね? フロー自体を微調整するのではなく、これに対するクリーンなソリューションが必要です。