0

2 つの Webflow を持つ Grails アプリケーションがあります。

  1. 購入用の 1 つ
  2. 私たちと連絡を取るための別の

問題:

ユーザーが購入ウィザードで (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 つのフロー (一方が不完全な場合) の間で交換できるはずですよね? フロー自体を微調整するのではなく、これに対するクリーンなソリューションが必要です。

4

1 に答える 1

0

g:link タグ (フローへのリンクを作成する場所) で回避策を見つけたようです追加すると、フロー間をシームレスに切り替えることができました。

<g:link absolute="true" controller="contact_us" action="index">

古いフローがフロー リポジトリから削除されているかどうかはわかりません。2 つのフローの間を 70 ~ 80 回クリックしてみましたが、ログに何も表示されていないようです。問題が発生した場合は、戻ってきて回答を更新します。

于 2013-09-16T19:28:22.980 に答える