在我的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>
事实上,rows
属性只是在分页开始时设置“截止”。而不是(大量)计算视图的当前大小,只需将其设置为“足够大”的值。魔术常数“9999”对我有效,但我认为MAX_INT是极限。
请记住,对于大量数据,渲染页面需要一段时间,因此您肯定会要求性能问题。
此外,Java Notes *类还有内部限制~10k后端C API引用 - 当命中时,服务器/客户端CRASHES。使用纯XSP组件应该是安全的。一旦你使用Notes *类(并且不回收)的额外代码为你的页面增添趣味,特别是在循环/重复内部,你的限制将只是该值的一小部分。
您需要从DominoView获取项目计数,而不是从组件的数据模型中获取rowCount。
你可能会小心你想要做什么,一个视图可能非常大,用户体验很糟糕。
扩展lib具有“infiniScroll”,可能更适合用户期望的内容。
你有没有尝试过?
<xp:this.rows><![CDATA[#{javascript:var vw:NotesView = database.getView("myTodoList");
return vw.getAllEntriesByKey(sessionScope.get("userFilter"),true).getCount().toFixed();}]]></xp:this.rows>