2014-02-07 84 views
0

我有一個像下面非Ajax方法ViewScoped給予同樣的結果託管bean

<p:dataTable value="#{userTable.tempLists}" var="user" 
    sortBy="#{user.userId}" sortOrder="descending"  
    paginator="true" 
    rows="10" paginatorPosition="bottom">   
    <p:column headerText="User ID" sortBy="#{user.userId}"> 
     <p:commandLink ajax="false" value="#{user.userId}" action="#{userTable.showDetails(user.userId)}"/> 
    </p:column> 
    <p:column headerText="User Name" sortBy="#{user.userName}"> 
     <h:outputText value="#{user.userName}"> 
     </h:outputText> 
    </p:column> 
</p:dataTable> 

一個DataTable我有一個小組名稱的細節,如以下

<p:panel> 
     <h:outputText value="#{userTable.userId}"/> 
     <h:outputText value="#{userTable.userName}"/> 
</p:panel> 

我的用戶表管理bean是視圖作用域。功能就像當用戶點擊commandLink時,我的方法將獲得用戶的詳細信息。獲取詳細信息後,dataTable將隱藏並顯示面板。對於用戶來說,它幾乎就像一個不同的頁面。

問題在於,當用戶點擊任何userId(commandLink)時,他將完美地獲得細節。然後他可以使用瀏覽器後退按鈕,並嘗試通過單擊另一個用戶標識來獲取詳細信息。但在這種情況下,用戶得到的結果與上一個相同。並沒有在錯誤日誌中。

我發現在視圖範圍管理bean的某個地方,這個問題與非ajax動作方法存在。但我需要保持它在viewcoped維護表狀態與排序和分頁。所以無論何時用戶按下返回按鈕,我都可以在選擇前顯示相同的屏幕

請幫忙。提前致謝。

+0

我感到困惑的流程:你希望用戶停留在同一頁面上,只是表現出它不同的元素?如果有一個'f:viewParam name =「userId」',那麼當空表顯示表時加載用戶實體(如果可能,則使用'f:viewAction')。 – mabi

+0

@mabi是的,你是對的實施。但是f:viewParam用於設置get請求的url中的值。在我的情況下,我通過命令鏈接發佈了請求。 –

+0

你想讓它保持那種方式嗎?因爲如果你允許反向導航,把這個狀態放在URL中是個好主意。 – mabi

回答

0

鍵盤上的後退按鈕不會真正調用新的HTTP請求。猜猜這是錯的。這實際上是使用列表和詳細信息頁面的問題。我一直在努力與相同的錯誤自己幾個小時。

請參見:Difference between jsf actionListener(param) and propertyListener when using back button on keyboard

+0

它沒有爲我工作:( –

+0

我有一些其他字段做部分請求(ajax)。瀏覽器返回後,這些組件停止工作。這一切發生在非ajax操作方法,然後瀏覽器回。 –

+0

你能解釋這個詳細代碼?很難弄清楚文本出了什麼問題。 – GregD

相關問題