Play中含糊不清

时间:2014-10-28 01:59:48

标签: scala playframework

我不知道从哪里开始调试这个。使用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]

2 个答案:

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

中受益