3

私はPlay(そして正直に言うとMVC)は初めてです。そして、私はそれがそれほど難しいはずではないように思われる何かに問題を抱えています。

私はちょうどこの同じ名前の投稿を見つけました: PlayFramework2.0テンプレートの一部をレンダリングする

しかし、私はこれを機能させることができないようです。

ボタンがクリックされたときにレンダリングしたい別のテンプレート(行)を含むテンプレート(インデックス)があります。これは私のインデックステンプレートのフォームです:

@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 に答える