Playframework 我能';t自定义模块securesocial for play2提出的视图,“;未找到:键入RequestHeader";

Playframework 我能';t自定义模块securesocial for play2提出的视图,“;未找到:键入RequestHeader";,playframework,securesocial,Playframework,Securesocial,我正在尝试使用play 2定制模块“securesocial”提出的视图 我已经做的是: 1/创建一个新的插件名SecureViewsPlugin,该插件在“controllers/SecuresViewsPlugin.scala”下实现TemplatesPlugin (……) 2/I使用以下内容更新了文件play.plugins: 1500:com.typesafe.plugin.CommonsMailerPlugin 9996:securesocial.core.providers.util

我正在尝试使用play 2定制模块“securesocial”提出的视图

我已经做的是:

1/创建一个新的插件名SecureViewsPlugin,该插件在“controllers/SecuresViewsPlugin.scala”下实现TemplatesPlugin

(……)

2/I使用以下内容更新了文件play.plugins:

1500:com.typesafe.plugin.CommonsMailerPlugin
9996:securesocial.core.providers.utils.DefaultPasswordValidator
9997:controllers.SecureViewsPlugin
3/我在“视图/安全”文件夹中的不同视图中制作了一份副本

这是我经常犯的错误的开始

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)]
我猜我做得不对


我不明白为什么会出现这些错误,您必须执行以下操作:

在所有视图/secure/..*.scala.html文件中:

用play.api.mvc.RequestHeader替换:RequestHeader 使用play.api.data.Form形成[String,String]或形成[String]

例如,在startSignUp.scala.html文件中,更改原始文件:

@(startForm:Form[String])(隐式请求:RequestHeader)


@(startForm:play.api.data.Form[String])(隐式请求:play.api.mvc.RequestHeader)

阿巴斯提到了让自己的模板工作的第一步

但对我来说,这仍然不起作用。引发了此异常:

play.api.PlayException: Cannot load plugin [Plugin [controllers.MyTemplatePlugin] cannot been instantiated.]
...
Caused by: java.lang.NoSuchMethodException: controllers.MyTemplatePlugin.<init>(play.Application)
play.api.PlayException:无法加载插件[插件[controllers.MyTemplatePlugin]无法实例化。]
...
原因:java.lang.NoSuchMethodException:controllers.MyTemplatePlugin.(play.Application)
解决此问题的一个方法是从中调整模板类的构造函数

class MyTemplatePlugin(应用程序:application)扩展了TemplatesPlugin

class MyTemplatePlugin(应用程序:play.application)扩展了TemplatesPlugin


此修复是由securesocial维护人员jaliss在

上提出的,我遇到了相同的问题,或者非常类似。看看这是否能帮助您:

错误:

[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]
原因:

[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)

解决方案

为了解决这个问题,我在custom 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)
@(loginForm: play.api.data.Form[(String,String)], errorMsg: Option[String] = None)(implicit request: play.api.mvc.RequestHeader)