0

私の Seam プロジェクトには 4 ページのウィザードがあります。ユーザーが最初のページ(wizard1.xhtml)に来てウィザードを開始すると、会話が始まります。私の中でそれを行うには、pages.xml次のコードがあります。

<page view-id="/pages/wizard1.xhtml">
  <begin-conversation join="true"/>
</page>

ウィザードの最後のページ(wizard4.xhtml)@Endには保存ボタンがあり、注釈を使用して会話を終了します。

@End
public String save() {}

ただし、ウィザード内を移動している間、ユーザーはリンクをクリックしてウィザード外のページにリダイレクトできます。これが発生した場合、会話はまだ終了していないことに注意してください。私が望むのは、ユーザーがウィザード ページ(wizard1.xhtml、wizard2.xhtml、wizard3.xhtml、またはwizard4.xhtml) から離れ
たらすぐに会話を終了することです。この投稿を見つけましたが、会話をすぐに終了したいので、タイムアウトは私の場合は良い選択ではありません。

4

3 に答える 3

2

あなたの問題の最も簡単で自然な解決策は、クリック可能なリンクを次のようにすることだと思います。

 <s:link value="here is the link" view="/expectedView.xhtml"  
         action ="#{targetBean.endingConversation()}"/>

そして、endingConversation() メソッドは次のようになります。

  @End
  public void endingConversation(){
       //do cleanup code

  }

アイデアは単純です。考えられるすべての出口ポイントでガードを使用する必要があります。

于 2012-11-22T15:39:47.980 に答える
1

うまくいくかどうかはわかりませんが、ただの考えです。

a4j:jsFunctionで注釈が付けられたメソッドを呼び出すJavaScript 関数を作成します@End

jsFunction次に、これをonClickハンドラーとしてすべてのリンクに追加します。(onClickただし、最適なハンドラーかどうかはわかりません)。

ユーザーがウィザードから移動すると、メソッドが呼び出され、会話が終了する必要があります。

于 2012-11-20T19:03:22.543 に答える
0

アプリケーションにページ ナビゲーションを実装するために pages.xml (またはページごとの page.xml ファイル) を使用している場合は、アクション文字列に基づいて、ページごとにリダイレクト動作を指定する必要があります。ウィザードの会話を継続していない各リダイレクトのナビゲーション ルールで、 を追加でき<end-conversation />ます。これは他の提案と似ていますが、結果として、長時間の会話の境界を含むアプリケーションのページ フローを示すナビゲーション ルール ファイルが作成されます。

于 2012-12-10T01:25:55.943 に答える