<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" />
为什么这段代码不起作用?我错过了什么吗?这是我在其他页面上使用的相同实现,它实际上是有效的。但这次没有运气。
答案 0 :(得分:3)
问题是每次创建托管bean时都会重新填充列表内容。由于托管bean具有请求范围,因此将在每个操作(包括ajax操作)上创建它。请参阅How to choose the right bean scope?以及那里提供的链接,其中解释了托管bean的范围,并提供了使用它们的良好示例。
由于您使用的是JSF 1.2,因此无法使用视图范围。相反,要解决这个问题,您有两种方法:
将托管bean的范围更改为会话范围。它将解决您的问题但托管bean将一直存在,直到用户会话到期,这不是一个非常好的解决方案。
在请求范围内维护托管bean,并使用RichFaces 3.3和@KeepAlive
注释的强大功能。此注释将使您的请求在用户仍在同一视图中时生效(非常类似于视图范围)。它的用法非常简单:
@KeepAlive
public class GpsReport {
//managed bean definition...
}