2013-11-15 66 views
0

在我的JSF項目中,我有一個多頁嚮導。我正在使用該向導的@ConversationScoped CDI bean。談話效果很好。當用戶進入嚮導的第一頁時,新的對話開始。當用戶點擊任何頁面中的提交按鈕時,對話結束。但我有幾個問題。
沒有結束的CDI對話

  1. 如果在嚮導的中間,用戶輸入在地址欄中輸入網址,訪問了另一個頁面,而不單擊提交按鈕會發生什麼,我仍然有辦法來結束談話?
  2. 我是否應該爲這種情況而煩惱,或者可以累積這種不受限制的對話成爲我的應用程序的開銷?

回答

1

大多數應用程序以某種跟蹤用戶當前所處位置的系統結束。這應該由JSF 2.2中的@FlowScoped來幫助。如果你可以使用它,那麼一切都應該爲你管理。應該很容易找到例子。

如果您不能使用FlowScoped並希望保留在@ConversationScoped上,則必須實現自己的系統來跟蹤用戶所在的位置。當用戶不再處於流程中時,您可以結束對話。

@Inject Conversation conversation; 

// conversation.end(); 

這裏是實現這種有用的部分:How to cleanly end a CDI @ConversationScoped

不過我會去http://deltaspike.apache.org/core.html和使用:要獲得談話。

MyBean myBean = BeanProvider.getContextualReference(MyBean.class, false);

個人而言,我會做的擴展,在Deltaspikes JSF模塊類型安全航行來達到同樣的事情,如果我不能使用FlowScoped。

祝你好運

+0

IMO FlowScoped過度設計用於大多數使用情況,並且CODI示波器效果更好。我希望DeltaSpike也會擁有它們。 –

+0

@DWWHI我可能會同意我必須首先使用它。 Deltaspike將擁有它們,因爲對主要提交者的時間限制,它將進入一個徹底停止導入的徹底版本。 –

+0

您提供的SO鏈接看起來很有趣。謝謝。 – prageeth