1

私はここ数週間JavaPlayFramework 2.0を試してきましたが、現在、次のことに苦労しています。

あるPlayテンプレートから別のPlayテンプレートにJavaオブジェクトを渡すにはどうすればよいですか?

私は問題なく単純なオブジェクトを渡すことができます:

GET /Login/:email   controllers.Application.login(email:String)

私のコントローラーに次のコードを使用します。

public static Result login(String email) {

    //Do some stuff

    return ok("");
}

しかし、私ができる必要があるのは、次のようなものです。

GET /Test/:user   controllers.Application.test(user:User)

私のコントローラーに次のコードを使用します。

public static Result test(User user) {

    //Do some stuff

    return ok("");
}

コンパイルしようとすると、次のエラーが発生します。

見つかりません:タイプUser

これを機能させるために私が何をする必要があるか誰かが知っていますか?それも可能ですか?助けに感謝します!

4

1 に答える 1

0

routes params頭痛を引き起こさないクリーンなアプローチであるように、基本的な(「通常の」タイプを書きたくない)タイプを使用します。オブジェクト全体を送信しようとする代わりに、そのオブジェクトを送信することをお勧めします。idおそらく、ある種の数値タイプかString、ユーザーモデルidLongタイプがある場合は、次のように簡単に送信できます。

GET /Test/:userId   controllers.Application.test(userId: Long)

コントローラ

public static Result test(Long userId) {
    User user = User.find.byId(userId);
    return ok("Now you're watching user: " + user.name);
}

他の便利なサンプルはブール値です。ブール値を渡す代わりに、タイプを使用する方が簡単0/1 Int/int です(デフォルト値はfalse)に設定されています。

GET /set-admin/:userId    controllers.App.setAdmin(userId: Long, setTo: Int ?= 0)

またtrue

GET /set-admin/:userId    controllers.App.setAdmin(userId: Long, setTo: Int ?= 1)

コントローラ

public static Result setAdmin(Long userId, int setTo) {
    User user = User.find.byId(userId);
    user.isAdmin = (setTo == 1); // of course isAdmin field of User model is type of Boolean
    user.update(id);
    return ok("User " + user.name + " is " + user.isAdmin);
}

したがって、テンプレートでは、リンクを作成できます。

<a href='@routes.App.setAdmin(user.id, 1)'>Set as admin</a>
<a href='@routes.App.setAdmin(user.id, 0)'>Set as common user</a>
于 2012-08-28T21:42:00.700 に答える