0

リンクにオブジェクト内のすべての変数を与える方法はありますか?これの目的は、リンクをブックマーク可能にすることです。画面を再構築するための重要な情報はすべてURLに含まれます。

私の回避策では、セッションとURLの書き換えが導入されています。これは、オブジェクトの業界変数を追加または変更するリンクですs

<a href="@{Stocks.index()}?s.industry=${roeBean.industry?.urlEncode()}">

リンクがクリックされると、Stocks.indexが呼び出され、オブジェクトsをパラメーターとして受け入れます。s.industryデータを受け取り、の他のすべての値sはnullです。したがって、パラメータをセッションに保存されているs別のコピーとマージできます。sその後、キャッシュが更新され、URLが書き直されます。

それは素晴らしい働きをしますが、playフレームワークが単に状態オブジェクトを拡張して変数を変更する(リンクのためだけに)何かを持っていればもっとエレガントでしょう。これを行うためのクリーンな方法はありますか?私はこれを画像化すると非常に便利です。

4

2 に答える 2

0

データベースにエンティティSがあり、このエンティティのs.industry値のみを変更したいことを理解しました。

s.industryと一緒にs.idパラメータを追加する場合は、Play!データベースからこのIDのSエンティティを取得し、URLで渡したパラメータをマージします。したがって、このようなリンクの場合:

<a href="@{Stocks.index()}?s.industry=${roeBean.industry?.urlEncode()}&s.id=1">

次のことが起こります。Playはid=1のSオブジェクトを取得し、次にURLパラメータとして渡した業界値を設定します。その後、 Stocks.indexメソッドはマージされたSオブジェクトを取得します。

于 2012-10-22T08:23:41.597 に答える
0

業界の作業を更新するためだけに、(インデックスではなく)新しいコントローラーメソッドを作成するだけでしょうか?以下は、追加するs.idとs.industryが渡されたときに機能します(または、存在する場合は、それが目的の場合は置き換えられます)。

あなたのビューでは:(ビューにsオブジェクトを送信しますが、今はそうしているようです)(また、私はgroovyテンプレートヘルパーを使用しています。必要に応じてhtmlを使用できます。同じ結果です)

#{a @Stocks.index(s.id, s.industry=roeBean.industry) } Add This Industry {/a}

コントローラ内:(文字列を業界に置き換えます)

public static void addIndustry(Long id, String industry) {
    Stock s = Search.findById(id);
    String i = industry;
    //Do your stuff
    s.save();
}

ここ(または他のもの)に静的文字列を渡すことも機能します。したがって、この例では、s.industry='test'はid=1およびindustry=testを取得します。

リンクにオブジェクトのすべてのプロパティを持たせたい場合は、オブジェクト全体を送信するだけではいけませんか?オブジェクト全体が必要な場合、オブジェクト内のすべてのプロパティのキー/値ビット全体を渡すのは大変な作業のように思えますか?したがって、この例では:

コントローラからビューをレンダリングするとき

render(s);

リンク?

#{a @Stocks.index(s, s.industry=roeBean.industry) } Add This Industry {/a}

保存するコントローラーで:

public static void addIndustry(Stock s, String industry) {
    //Do your stuff
    s.save();
}
于 2012-10-22T10:38:22.217 に答える