java - 扩展数据表和DataScroller

标签 java jsf richfaces richdatatable

<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"  />

为什么这段代码不起作用?我错过了什么吗?这与我在另一页上使用的实现完全相同,它确实有效。但这次运气不好。

最佳答案

问题是每次创建托管 bean 时都会重新填充列表内容。由于托管 bean 有一个请求范围,它将在每个操作(包括 ajax 操作)上创建。请引用How to choose the right bean scope?以及那里提供的链接,其中解释了托管 bean 的范围并提供了很好的用法示例。

由于您使用的是 JSF 1.2,因此无法使用 View 范围。相反,要解决此问题,您有两种方法:

  1. 将托管 bean 的范围更改为 session 范围。它会解决您的问题但是托管 bean 将一直存在到用户 session 过期为止,这不是一个很好的解决方案。

  2. 在请求范围内维护您的托管 bean,并使用 RichFaces 3.3 和 @KeepAlive 注释的强大功能。此注释将使您的请求在用户仍处于同一 View (与 View 范围非常相似)时得以生存。它的用法非常简单:

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

关于java - 扩展数据表和DataScroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578938/

相关文章:

java - 如何在android中将对象列表从一个 Activity 发送到另一个 Activity ?

java - 让一切都像菜单项中的按钮一样工作

jsf - Primefaces 选项列表。 DualListModel 的 Setter 删除源和目标

java - 未渲​​染的组件没有更新值

jsf-2 - Richfaces 未定义 javascript 错误

java - 修改数组列表编码问题中的项目

java - 无法解析构造函数 'arrayadapter(android.widget.adapterview.onitemselectedlistener, int, java.util.arraylist)'

java - 处理同一页面上没有请求的丢失文件下载链接

java - MyFaces 与 Sun 的引用实现 - 后者不是免费的?

RichFaces 4 - 过滤扩展数据表的行数