我已经尝试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("");
}
当我尝试编译时,我得到以下错误:
找不到:键入用户
有人知道我需要做什么才能让它发挥作用吗?这可能吗?感谢您的帮助!
使用基本(不想写"普通")类型作为routes params
是一种干净的方法,不会引起头痛。对于一个尝试发送整个对象的示例,最好发送它的id
-很可能是某种数字类型或唯一的String
。例如,如果您的用户模型具有Long
类型的id
,则可以简单地执行:
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>