首页 > 解决方案 > XPages - 如何在 xp:repeat control 中显示所有记录?

问题描述

在我的 XPage 上,我定义了一个数据源,它是一个过滤视图:

<xp:this.data>
        <xp:dominoView var="viewItems" viewName="myTodoList">
            <xp:this.categoryFilter><![CDATA[#{javascript:return sessionScope.get("userFilter");}]]></xp:this.categoryFilter>
        </xp:dominoView>
    </xp:this.data>

我想通过重复控件显示数据。但我想显示数据集中的所有记录。我计算了多少 xp:this.rows 属性?

<xp:repeat id="repeat1" value="#{viewItems}"
    var="obj" indexVar="idx">
    <xp:this.rows><![CDATA[#{javascript:getComponent("repeat1").getDataModel().getRowCount()}]]></xp:this.rows>

</xp:repeat>

标签: xpagesxpages-ssjs

解决方案


实际上,该rows属性只是在分页开始时设置“截止”。而不是(大量)计算视图的当前大小,只需将其设置为“足够大”的值。魔术常数“9999”对我有用,但我认为 MAX_INT 是极限。

请记住,对于大量数据,渲染您的页面需要一段时间,因此您肯定会调用性能问题。

此外,Java Notes* 类的后端 C API 引用有约 10k 的内部限制 - 当命中时,服务器/客户端崩溃。使用纯 XSP 组件应该是安全的。一旦您使用使用 Notes* 类(并且不回收)的额外代码为您的页面增添趣味,尤其是在循环/重复内部,您的限制将只是该值的一小部分。


推荐阅读