1

我已经用 Java Play Framework 2.0 试验了几个星期,但我现在正在努力解决以下问题:

如何将 Java 对象从一个 Play 模板传递到另一个?

我可以传递简单的对象没有问题:

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("");
}

当我尝试编译时,我收到以下错误:

未找到:键入用户

有谁知道我需要做什么才能让这个工作?甚至可能吗?感谢任何帮助!

4

1 回答 1

0

使用基本(不想写“普通”)类型routes params是干净的方法,不会引起头痛。对于一个示例,而不是尝试发送整个对象,最好发送它id- 很可能是某种数字类型或唯一String的示例,如果您的用户模型具有id类型Long,您可以简单地做到这一点:

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 回答