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

我试图删除“(隐式请求: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

此修复由securesocial 维护者jaliss 在https://github.com/jaliss/securesocial/issues/99上提出

于 2012-12-29T09:02:17.273 回答