1

私は次のplay2コードを持っています:

  implicit def contextToRequest(rc: RequestContext[_]) = rc.request
  implicit def contextToFlash(rc: RequestContext[_]) = rc.request.flash
  implicit def contextToSession(rc: RequestContext[_]) = rc.request.session

  def login: Action[AnyContent] = PublicAction { implicit rc =>
    Ok(html.login(loginForm))
  }

RequestContextPlay2の私自身のカスタムクラスラッパーですRequest

私のscalaビューは次のように始まります:

@(form: Form[(String,String,Boolean)])(implicit flash: Flash, session: Session,rc: utils.RequestContext[_])

しかし、コンパイラは次のように述べています。

パラメータflashの暗黙的な値が見つかりませんでした:play.api.mvc.Flash

なぜそれが機能しないのか誰かが私に説明できますか?おそらく、暗黙のパラメータに暗黙の変換を使用することはできませんか?

それでは、Play2リクエストからSession / Flashへの暗黙の変換がすでに機能している理由を誰かに説明してもらえますか?それを実行しても機能しませんか?

4

2 に答える 2

1

複数の暗黙的なパラメーターがあり、その一部が他のメンバーのプロパティである場合は、設計に問題があります。

class B
class C

class A {
  val b:B = _
  val c:C = _ 

}

def myMethod(someData:String)(implicit a:A, b:B, c:C) {

}

実際、メソッド内に必要なのは、そのAのBメンバーとCメンバーです。ただし、このような署名を使用すると、そのAとは関係のない特定のAとBおよびCを提供できます。正しい署名は次のようになります

  def myMethod(someData:String)(implicit a:A) {
    // trick to import members variable
    import a._
    println(b)
    println(c)
  }
于 2012-08-09T09:53:33.903 に答える
0

うーん、それはうまくいくようです:

implicit def contextToRequest(implicit rc: RequestContext[_]) = rc.request

Play2はすでにリクエストからフラッシュ/セッションへの暗黙の変換を提供しているため、あいまいさが生じるため、他の2つのメソッドは必要ありません。

于 2012-08-08T18:51:46.000 に答える