我是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>
答案 0 :(得分:3)
很抱歉没有为您提供完整的解决方案,但恕我直言,您应该先了解一下基础知识。
您的操作方法会返回整个页面,而不仅仅是其中的一部分,因为它是完整的HTTP响应。这意味着您在该操作中调用的是您的浏览器将呈现的内容。 getNextRows
需要一个参数来查找下一行。要仅更改页面的一部分,您需要AJAX。
按钮单击应使用下一组行重新呈现索引页面。将rows
作为参数添加到索引模板。使用这些行调用行模板。
答案 1 :(得分:1)
从静态字段中获取该状态的一些可能性(肯定不会很好):