2011-06-04 65 views
0

使用richfaces 3.1.5和myfaces/jsf,並注意當我調用a4j動作時,在執行之前,它所在的整個facelet正在重新渲染 - 我遠程調試,當我點擊a4j鏈接時,首先看到我的phaseListener被調用(這是有道理的),但是我也看到了包含a4j動作鏈接的facelet中的bean getter的所有邏輯,然後最終行動執行,然後再行動。在一些getter的邏輯是昂貴的,所以我不希望他們被調用不必要的 - 我只是想要行動點擊 - >調用行動 - >重新區域,而不是這個循環的行動點擊 - >重新整理整個頁面 - >調用現在正在發生的動作 - >重新渲染區域。jsf - a4j動作觸發,但在頁面渲染邏輯觸發後

不知道它是否重要,但我的a4j動作沒有映射到actionListener,而只是一個調用String方法返回null的動作。謝謝你的幫助。

回答

0

不保證getter只會在JSF中調用一次。您應該調用getter中的昂貴調用或在調用getter中的邏輯之前進行檢查。總的來說,不建議在getter中放置昂貴的邏輯(在JSF的上下文中)。

+0

嗨最大,所以該應用程序是由url驅動的,因爲通過它發送的請求參數驅動預處理 - 昂貴的操作只發生在第一個getter(後續getters在同一頁上引用相同的信息檢查處理標誌避免重新喚起相同的邏輯)。這些bean是請求範圍的,因爲很可能使用此應用程序打開多個選項卡/窗口。那麼我怎樣才能標記來自ajax調用的處理 - 我不能通過action或actionParam var來做到這一點,因爲在實際的a4j調用觸發之前,頁面渲染(以及其上的getter)仍然無用地觸發。謝謝。 – James 2011-06-06 16:15:45

+0

我不是100%確定我明白這個問題。但是,Ajax或非Ajax請求,您總是會通過相同的JSF階段。跳到最後兩個,它總是調用應用程序,然後是渲染響應。所有操作總是在頁面呈現之前被調用。希望這可以幫助。 – 2011-06-07 16:29:28

相關問題