渲染Play框架2.0.2模板的一部分

时间:2012-08-24 16:24:14

标签: java scala playframework playframework-2.0

我是Play的新手(说实话)是MVC。而且我遇到的问题似乎不应该那么难。

我刚发现这个名字相同的帖子:Rendering a portion 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>

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

  • 将所有行都返回给客户端,然后让它在JavaScript中完成其余的工作(如果数据太多,则无法正常工作)
  • 在会话中存储最新行的编号(在cookie中)
  • 明确处理行号,让客户端在需要下一行时返回
  • 执行RESTful分页(请参阅Paging in a Rest CollectionPagination in a REST web application
  • 尝试利用分布式缓存