2017-04-19 39 views
1

我正在使用<f:event type="preRenderView" listener="#{bean.listener()}"/>事件。它在頁面重新加載(F5)和頁面上按下按鈕(呈現表格)時都會觸發。如何識別頁面刷新(F5)中的回傳,而不是按鈕按下?

    <a4j:commandButton 
         value="rerender" 
         action="#{bean.updateTable()}" 
         render="myTable" /> 

我只需要在頁面刷新(F5)時調用監聽器,而不是按下按鈕時。

有沒有辦法?

FacesContext.getCurrentInstance().isPostback()不會解決,因爲該按鈕也是一個POST。

回答

1

您無法避免偵聽器被調用,但在偵聽器內部,您可以檢查請求不是帖子,也不是AJAX請求。

看看這個: How to differentiate Ajax requests from normal Http requests?

,你也可以知道請求方法:

request.getMethod() 

如果它不是一個Ajax,這是一個GET,那麼頁面已經請求在第一時間,或用F5刷新。

+0

也許還可以參考此:http://stackoverflow.com/questions/14687910/how-to-avoid-prerenderview-method-call-in-ajax-request(實際上目前的問題是我所指的一個相反的問題到這裏,只適用於新版本的jsf) – Kukeltje

0

我不確定您是否完全可以避免調用監聽器。我認爲它是JSF規範的一部分。

雖然你可以解決它。添加一個事件到點擊按鈕(onclick我猜),設置一個隱藏變量buttonClicked。在你的監聽器中,檢查變量。如果已設置,請立即返回。偵聽器代碼仍然應該在正常刷新上運行,但不能在單擊按鈕時運行。

相關問題