3

我是 Play 新手(老实说,我也是 MVC 新手)。我遇到了一个看起来不应该那么难的问题。

我刚刚发现了这个同名的帖子: Rendering a part of a Play framework 2.0 template

但我似乎无法让这个工作。

我有一个模板(索引),其中包含另一个模板(行),我想在单击按钮时呈现该模板(索引)。这是我的索引模板中的表格:

@form(routes.Application.getNextRows()) {<input type="submit" value="Next Rows!">}

这是getNextRows:

public static Result getNextRows() {
    return ok(views.html.tags.rows.render(rowsIterator.next()));
}

这就是我认为我有问题的地方,但我不知道我应该如何进行那个调用,或者我应该返回什么(没有得到一些 NullPointerException)。

这是需要重新渲染的位(在索引中):

<table cellspacing="0"  style="table-layout:fixed"  border="2">
    <col width="50%">
    <col width="45%">
    <col width="5%">
    @tags.rows(rowsIterator.first())
</table>

因此,当我单击按钮时,我需要传入一个新的行元素,而不是“rowsIterator.first()” 大概我做错了什么,或者错过了一些明显的调用来解决这个问题。

感谢您的帮助(如果很明显我错过了一些更大的概念,请随时教育我)。


查看 Zentasks 示例,我看到这样的代码,它似乎使页面的一部分重新加载。知道这是如何工作的吗?

<a class="name" href="#@routes.Tasks.index(project.id)">@project.name</a>
4

2 回答 2

3

很抱歉没有为您提供完整的解决方案,但恕我直言,您应该首先深入了解基础知识。

您的操作方法返回整个页面,而不仅仅是其中的一部分,因为它是完整的 HTTP 响应。这意味着您在该操作中调用的任何内容都是您的浏览器将呈现的内容。getNextRows需要一个参数来查找下一行。要仅更改页面的一部分,您需要 AJAX。

单击按钮应使用下一组行重新呈现索引页面。rows作为参数添加到索引模板。使用这些行调用您的行模板。

于 2012-08-24T18:58:20.983 回答
1

从静态字段中获取该状态的几种可能性(肯定不会很好):

  • 将所有行返回给客户端,让它在 JavaScript 中完成其余的工作(如果数据过多,则效果不佳)
  • 存储会话中最新行的编号(在 cookie 中)
  • 显式处理行号并让客户端在需要下一个时返回它
  • 进行RESTful 分页(请参阅REST集合中的分页和REST Web 应用程序中的分页
  • 尝试利用分布式缓存
于 2012-08-25T06:38:10.720 回答