2012-01-31 55 views
0

我在我的JSF2應用程序的標題中有ap:poll元素,每秒觸發以檢查拍賣結束時間(這可能會在後臺的任何時候發生變化,我必須留在最前面)。我現在注意到,每當輪詢觸發時,標題中的所有「呈現」方法都會被調用。這是爲什麼?它如何被阻止?呈現的屬性在標題中被重複調用(編輯:h:鏈接vs h:用於導航的commandLink和會話屬性)

,可能是有關該代碼的一部分:

<td>Remaining Time: 
    <h:outputText id="remTime" value="#{auctionBean.remainingTime}"/>  
    <p:poll listener="#{auctionBean.calcRemainingTime()}" interval="1" update="remTime" /> 
</td> 

編輯:

更多關於我的功能要求的位。我有一個有8個鏈接的主頁:標題5和頁腳3。我還有一個搜索組件,我需要顯示 - 一旦用戶登錄了 - 其中3個鏈接。我這樣做的方式是在會話中傳遞「fromPage」屬性,並決定顯示或隱藏搜索組件。

當我爲所有主頁鏈接使用h:commandLink時,它都可以正常工作。但是另一個問題出現了:JSF url只是一次點擊而已。這是一個已知的問題,所以我不會詳細解釋它。

好的。所以我搬到了h:link。現在,網址每次點擊都會更改,並且行爲正常。但是對於每一次點擊,所有的「結果」方法 - 主頁上的所有8個鏈接 - 從左到右調用,從上到下調用​​。是的,每次點擊都會調用所有8個「結果」方法。 URL正確更改並且頁面顯示正確,但會話中的「fromPage」屬性始終用於最後一個鏈接:右下角的鏈接。

爲了讓事情變得更奇怪,我的搜索組件總是顯示出來,因爲標題上的最後一個鏈接是它應該顯示的鏈接。當我通過在頁面上放置另一個鏈接(在右上角)來測試此功能時,對於搜索不應顯示的頁面,搜索現在不會顯示。

好的。我可以放棄顯示正確頁面的url,切換回commandLinks,繼續我的生活。但我想要正確,並幫助我的用戶。有解決方案嗎?

+0

有人嗎?這個問題沒有解決方案? – Herzog 2012-01-31 20:04:39

+0

我編輯了我的問題。任何想法? – Herzog 2012-02-02 10:07:07

回答

0

對進程屬性使用部分處理,只處理必要的處理。

+0

感謝您的迴應,Catgatay。這實際上是我試圖用p:poll標記做的事情:或者我錯過了什麼? – Herzog 2012-01-31 13:41:35

+0

我編輯了我的問題。任何想法? – Herzog 2012-02-02 10:06:48

0

h:link使用JSF規範所稱的「搶先導航」。從規格:

在 呈現響應階段,客戶端激活之前的鏈路(並且可能永遠不會激活的鏈接)的情況下,導航解決。

這樣,您可以像使用h:commandLink動作一樣使用導航規則。然而,如果你的結果是一個EL方法表達式,那麼你在調用它的過程中將調用你的「結果方法」。這是預期的行爲。

我認爲可能適用於您的替代方法是向結果添加查詢參數,並在目標頁面上放置一個f:viewParam。例如:

page1.xhtml

<h:link value="Page 2" outcome="page2?fromPage=page1"/> 

第2頁。xhtml

<f:metadata> 
    <f:viewParam name="fromPage" value="#{page2.fromPage}"/> 
</f:metadata> 

現在您可以使用#{page2.fromPage}來執行您的條件呈現。這可能也避免了在會話中存儲fromPage