【发布时间】:2012-06-17 14:36:49
【问题描述】:
我正在尝试在 play framework 2.0.1 视图中迭代 mongo DBCursor。但是,没有列出任何内容。理想情况下,我想对光标进行分页,但即使我能够列出光标中的所有对象也可以。
这就是我正在做的事情。 在我的控制器中,我查询 Mongo DB 并渲染 DBCursor。日志表明光标不为空。
然后在视图中我有以下内容:
@(cursor: com.mongodb.DBCursor)
@main("Title") {
<div id="objects" class="content">
<h2>Objects</h2>
@if(cursor.count() == 0) {
There are currently no objects in the data base.
} else {
@while(cursor.hasNext()) {
@cursor.next().get("name");
}
}
</div>
}
不幸的是,除了呈现页面时的标题之外,没有列出任何内容。
有趣的是,如果我省略了@while(cursor.hasNext()) 并且只输出光标的第一个对象,那么它就会呈现在页面上。
显然那段时间出了点问题。那么,是否可以在视图中渲染(和/或分页) DBCursor?
谢谢!
【问题讨论】:
-
我不知道为什么 @while() 不起作用。也许它根本不存在于 scala 模板中?但我可以告诉你,这种工作不打算在视图中完成。视图用于渲染,而控制器用于逻辑和访问数据库。考虑将 DBObjects 解析为控制器中的列表或数组,并在视图中使用 @for 对其进行迭代。
-
哦,太尴尬了。我以为有一段时间。所以你说的是,我应该从控制器中的光标中获取对象,然后将它们以列表的形式传递给视图。是否有可能以某种方式对它们进行分页?他们可能很多。而且真的没有必要一次全部取走。感谢您的回复。
-
您可以使用limit() 和skip() 方法进行分页。示例:myCollection.find(query).skip(40).limit(20);
-
谢谢,应该可以。如果您将其写为答案,我会接受。由于糟糕的设计(在视图中访问 mongo)我没有想到。
标签: scala mongodb playframework playframework-2.0