2013-03-15 57 views
2

我正在使用JSF 2.1和primefaces 3.4。查看範圍內的bean沒有被破壞

我所有的xhtml視圖都包含具有標題,左側導航面板,頁腳和內容的佈局。託管的豆類位於視圖範圍

在大多數我的看法,我使用F:事件監聽型preRenderView的並初始化某些屬性和服務。在聽衆中,我有條件聲明來檢查回發請求。它僅在請求不是回發時優於preRenderView監聽器中的完整代碼。

即使我瀏覽到其他頁面(從假設網頁A網頁B)通過左側導航面板中的鏈接時,視圖範圍沒有得到破壞,當我再次回到返回A,支票回覆請求返回true。不確定爲什麼會發生。

如果有人能幫助我,我感激不已?

在此先感謝。

+0

將新的參數添加到返回的返回頁面的鏈接,並檢查它在你的init裏面檢查回發 –

+0

我很想知道你是如何確定_view作用域並沒有被銷燬。是因爲@ @ PreDestroy從來沒有被調用或其他原因? – rdcrng

+0

Thanks @ rdcrng.Yes PreDestroy沒有被調用,但現在知道它正在銷燬這個bean。 – Neeraj

回答

1

您需要通過GET進行導航而不是POST。

即使用普通的頁面到頁面導航,也可以使用<h:link><h:button>而不是<h:commandLink><h:commandButton>。這樣isPostback()將返回false

此外,你不清楚你如何觀察視圖範圍的bean沒有被破壞。您是否在bean的構造函數中放置了一個調試斷點,以查看在請求新頁面時是否調用它?如果它實際上是完全相同的實例,那麼只有在實際上有條件地包含新頁面而不是真正導航到物理上不同的視圖時纔會發生這種情況。

+0

謝謝@BalusC。事實上,它正在破壞豆子。我在bean的構造函數上使用調試斷點檢查,但它不調用PreDestroy。另外,如果我使用,isPostback返回false,但我必須有條件地導航(比方說,我有兩個不同視圖的主頁),並且我還在導航之前執行了某些操作並將結果放入會話中。最好的辦法是什麼? – Neeraj

+0

我的問題現在解決了。我仍然使用commandLink進行頁面導航,但現在我不使用動作,而是使用actionListener,然後在此偵聽器中,一旦處理完所有內容並放入會話中,我就會使用重定向進行導航。 – Neeraj