2013-05-16 56 views
1
<rich:extendedDataTable sortMode="single" width="700px" value="#{gpsReport.reportSummary}" 
               enableContextMenu="true" var="gps" 
               selectionMode="single" 
               rowClasses="tableRow1, tableRow2" 
               id="tbl_gps" height="301px" rows="#{gpsReport.rowCount}" rowKeyVar="row"> 

          <rich:column label="User" style="text-align: center" width="100px" > 

           <f:facet name="header"> 
            <h:outputText value="User" /> 
           </f:facet> 
           <h:outputText value="#{gps.currentUser}" /> 

          </rich:column> 

          <rich:column label="Time Stamp" style="text-align: center" width="140px" > 

           <f:facet name="header"> 
            <h:outputText value="Time Stamp" /> 
           </f:facet> 
           <h:outputText value="#{gps.modifiedDate}" /> 

          </rich:column> 

          <rich:column label="Latitude" style="text-align: center" width="110px" > 

           <f:facet name="header"> 
            <h:outputText value="Latitude" /> 
           </f:facet> 
           <h:outputText value="#{gps.latitude}" /> 

          </rich:column> 

          <rich:column label="Longitude" style="text-align: center" width="110px" > 

           <f:facet name="header"> 
            <h:outputText value="Longitude" /> 
           </f:facet> 
           <h:outputText value="#{gps.longitude}" /> 

          </rich:column> 

          <rich:column label="Location" style="text-align: center" width="240px" > 

           <f:facet name="header"> 
            <h:outputText value="Location" /> 
           </f:facet> 
           <h:outputText value="#{gps.location}" /> 

          </rich:column> 

         </rich:extendedDataTable> 

         <rich:datascroller align="center" for="tbl_gps" /> 

爲什麼此代碼不起作用?我錯過了什麼嗎?這與我在其他頁面上使用的實現完全相同,實際上它工作正常。但這次沒有運氣。擴展數據表和DataScroller

+0

JSF和RF的哪個版本?託管bean的範圍是什麼? –

+0

RF 3.3.3和JSF 1.2 –

+1

而你的託管bean的範圍是... –

回答

3

問題是每次創建託管bean時都會重新填充列表內容。由於託管bean有一個請求範圍,它將在每個操作(包括ajax操作)上創建。請參考How to choose the right bean scope?和那裏提供的鏈接,它解釋了託管bean的範圍,並提供了很好的示例。

由於您使用的是JSF 1.2,因此無法使用視圖範圍。相反,要解決此問題,您有兩種方法:

  1. 將託管bean的範圍更改爲會話範圍。它將解決您的問題但是託管的bean將一直存在,直到用戶會話過期,而不是一個很好的解決方案。

  2. 在請求範圍內維護您的託管bean,並使用RichFaces 3.3和@KeepAlive註釋的強大功能。當用戶仍處於同一視圖中時,此註釋將使您的請求處於活動狀態(與查看範圍非常相似)。它的用法很簡單:

    @KeepAlive 
    public class GpsReport { 
        //managed bean definition... 
    } 
    
+0

你好Luiggi,謝謝你花時間。我正在按照你的建議開展工作。我會在稍後通知。再次感謝。 –