3

play 2 でモジュール「securesocial」によって提案されたビューをカスタマイズしようとしています

私がすでに行ったことは次のとおりです。

1/ "controllers/SecuresViewsPlugin.scala" の下に TemplatesPlugin を実装する新しいプラグイン名 SecureViewsPlugin を作成します。

package controllers

import play.api.mvc.{RequestHeader, Request}
import play.api.templates.Html
import securesocial.controllers.Registration.RegistrationInfo
import securesocial.controllers.TemplatesPlugin
import securesocial.core.{SecuredRequest, SocialUser}
import play.api.data.Form
import securesocial.core.SecureSocial._
import securesocial.controllers.PasswordChange.ChangeInfo


class SecureViewsPlugin(application: App) extends TemplatesPlugin {

  override def getLoginPage[A](implicit request: Request[A], form: Form[(String, String)],
                               msg: Option[String] = None): Html =
  {
    views.html.secure.login(form, msg)
  }

  override def getSignUpPage[A](implicit request: Request[A], form: Form[RegistrationInfo], token: String): Html = {
    views.html.secure.Registration.signUp(form, token)
  }

(..)

2/ ファイル play.plugins を次のように更新しました。

1500:com.typesafe.plugin.CommonsMailerPlugin
9996:securesocial.core.providers.utils.DefaultPasswordValidator
9997:controllers.SecureViewsPlugin

3/「views/secure」フォルダの別のビューをコピーしました

/Views
     /secure
         /inputFieldConstructor.scala.html
         /login.scala.html
         /(...)

これが私がいつも得るエラーの始まりです

not found: type RequestHeader

In app/views/secure/login.scala.html at line 0.

->@(loginForm: Form[(String,String)], errorMsg: Option[String] = None)(implicit request: RequestHeader) 


[error] /Users/clementaubert/Desktop/demo/target/scala-2.9.1/src_managed/main/views/html/secure/login.template.scala:24: not found: type RequestHeader
[error] object login extends BaseScalaTemplate[play.api.templates.Html,Format[play.api.templates.Html]](play.api.templates.HtmlFormat) with play.api.templates.Template3[Form[scala.Tuple2[String, String]],Option[String],RequestHeader,play.api.templates.Html] {
[error]                                                                                                                                                                                                                    ^
[error] /Users/clementaubert/Desktop/demo/target/scala-2.9.1/src_managed/main/views/html/secure/login.template.scala:27: not found: type RequestHeader
[error]     def apply/*1.2*/(loginForm: Form[(String,String)], errorMsg: Option[String] = None)(implicit request: RequestHeader):play.api.templates.Html = {
[error]                                                                                                           ^
[error] /Users/clementaubert/Desktop/demo/app/controllers/SecureViewsPlugin.scala:18: type mismatch;
[error]  found   : play.api.data.Form[(String, String)]
[error]  required: play.data.Form[(java.lang.String, java.lang.String)]
[error]     views.html.secure.login(form, msg)
[error]  
login.scala.html

「(implicit request: RequestHeader)」を削除しようとしましたが、このエラーが発生しました

type mismatch; found : play.api.data.Form[(String, String)] required: play.data.Form[(java.lang.String, java.lang.String)]

私はそれを正しい方法でやっていないと思います。

これらのエラーが発生する理由がわかりません

4

3 に答える 3

3

私は同じ問題、または非常に似た問題を抱えていました。これが役立つかどうかを確認してください:

エラー:

[error] C:\workspace\zenplanning\app\views\index.scala.html:0: not found: type RequestHeader
[error] C:\workspace\zenplanning\app\views\index.scala.html:1: not found: type RequestHeader
[error] @(loginForm: play.api.data.Form[(String,String)], errorMsg: Option[String] = None)(implicit request: RequestHead
er)
[error]                                                                                                     ^

play.PlayExceptions$CompilationException: Compilation error[not found: type RequestHeader]

原因:

これは、securesocial がルーターで scala を使用し、Play プロジェクトで Java を使用しているためだと思います。送信された RequestHeader は Scala (play.api.mvc.RequestHeader) にありますが、私のテンプレートは Java (play.mvc.RequestHeader) にあると想定していました。

解決

これを解決するために、カスタム login.scala.html を次のように変更しました。

@(loginForm: play.api.data.Form[(String,String)], errorMsg: Option[String] = None)(implicit request: RequestHeader)

これに:

@(loginForm: play.api.data.Form[(String,String)], errorMsg: Option[String] = None)(implicit request: play.api.mvc.RequestHeader)
于 2014-11-18T18:05:20.067 に答える
2

次のことを行う必要があります。

すべての Views/secure/...*.scala.html ファイルで:

置き換え: RequestHeader を play.api.mvc.RequestHeader Form[String, String] に、または Form[String] を play.api.data.Form に置き換えます。

たとえば、startSignUp.scala.html ファイルで、オリジナルを変更します。

@(startForm:Form[String])(暗黙のリクエスト: RequestHeader)

@(startForm:play.api.data.Form[String])(暗黙のリクエスト: play.api.mvc.RequestHeader)

于 2012-12-20T03:30:39.220 に答える
0

Abbas は、独自のテンプレートを機能させるための最初のステップについて言及しました。

しかし、私にとってはまだうまくいきませんでした。この例外がスローされました:

play.api.PlayException: Cannot load plugin [Plugin [controllers.MyTemplatePlugin] cannot been instantiated.]
...
Caused by: java.lang.NoSuchMethodException: controllers.MyTemplatePlugin.<init>(play.Application)

この問題の修正は、テンプレート クラスのコンストラクターを

class MyTemplatePlugin(application: Application) extends TemplatesPlugin

class MyTemplatePlugin(application: play.Application) extends TemplatesPlugin

この修正は、 https: //github.com/jaliss/securesocial/issues/99 で securesocial メンテナー jaliss によって提案されました。

于 2012-12-29T09:02:17.273 に答える