我不知道从哪里开始调试这个。使用Slick和SecureSocial播放2.3.5。
我的路线工作正常,直到我写了第一个接受参数:
GET /activity/ controllers.ActivitiesController.show(id: Int)
一旦添加了该路由,编译器就会指出它并且错误如下:
ambiguous implicit values: [error] both method wrapJava in object HandlerInvokerFactory of type =>
play.core.Router.HandlerInvokerFactory[play.mvc.Result]
[error] and method wrapJavaPromise in object HandlerInvokerFactory of type =>
play.core.Router.HandlerInvokerFactory[play.libs.F.Promise[play.mvc.Result]]
[error] match expected type play.core.Router.HandlerInvokerFactory[T]
答案 0 :(得分:4)
好吧,我不确定你是否处于@rspencer提到的情况。
我在另一种情况下得到了相同的错误消息:
在Controller
中,当我尝试使用Action
这样的方法???
未实现时:
def test = ???
然后我打开浏览器并访问http://localhost:9000
,会显示一条错误消息:
含糊不清的隐含值: 类型=>的对象HandlerInvokerFactory中的方法wrapJava play.core.routing.HandlerInvokerFactory [play.mvc.Result] 和类型为>的对象HandlerInvokerFactory中的方法wrapJavaPromise; play.core.routing.HandlerInvokerFactory [play.libs.F.Promise [play.mvc.Result]] 匹配预期类型play.core.routing.HandlerInvokerFactory [T]
如果您遇到这种情况,请将???
更改为TODO
,如下所示:
def test = TODO
Revist http://localhost:9000
,现在好了。
答案 1 :(得分:0)
路由文件不是Scala,只能编译为Scala。因此,您使用的语法不正确。你写的是什么:
GET /activity/ controllers.ActivitiesController.show(id: Int)
应该是这样的:
GET /activity/:id controllers.ActivitiesController.show(id: Int)
然后您的ActivitiesController
应该:
class ActivitiesController extends Controller {
def show(id: Int) = Action { ... }
}
请注意路径组件中的:id
。这指示路由编译器期望URL路径中该点处的字符串可以隐式转换为Int。然后它执行转换并将整数参数传递给控制器的show
方法。您可能会从reading the documentation