将play 2.2应用程序移植到2.3.2版本(Scala)时出错
我正在将Play 2.2应用程序移植到Play 2.3应用程序(
Scala).
为此,我将安全的社交版本更改为支持Play 2.3的主-SNAPSHOT. 但是在编译时遇到我的播放控制台中的错误. 怎么了? [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:33: ambiguous implicit values: [error] both method request2lang in trait Controller of type (implicit request: play.api.mvc.RequestHeader)play.api.i18n.Lang [error] and value lang of type play.api.i18n.Lang [error] match expected type play.api.i18n.Lang [error] securesocial.views.html.Registration.signUp(form,token) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:44: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] securesocial.views.html.Registration.startSignUp(form) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:55: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] securesocial.views.html.Registration.startResetPassword(form) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:66: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] securesocial.views.html.Registration.resetPasswordPage(form,token) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:77: not found: type SecuredRequest [error] def getPasswordChangePage[A](implicit request: SecuredRequest[A],form: Form[ChangeInfo]): Html = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:78: Cannot find any HTTP Request Header here [error] securesocial.views.html.passwordChange(form) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:99: not found: type Identity [error] def getAlreadyRegisteredEmail(user: Identity)(implicit request: RequestHeader): (Option[Txt],Option[Html]) = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:100: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] (None,Some(securesocial.views.html.mails.alreadyRegisteredEmail(user))) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:110: not found: type Identity [error] def getWelcomeEmail(user: Identity)(implicit request: RequestHeader): (Option[Txt],Option[Html]) = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:111: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] (None,Some(securesocial.views.html.mails.welcomeEmail(user))) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:122: too many arguments for method apply: ()(implicit request: play.api.mvc.RequestHeader,implicit lang: play.api.i18n.Lang)play.twirl.api.HtmlFormat.Appendable in object unknownEmailNotice [error] (None,Some(securesocial.views.html.mails.unknownEmailNotice(request))) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:133: not found: type Identity [error] def getSendPasswordResetEmail(user: Identity,token: String)(implicit request: RequestHeader): (Option[Txt],Option[Html]) = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:134: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] (None,Some(securesocial.views.html.mails.passwordResetEmail(user,token))) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:144: not found: type Identity [error] def getPasswordChangedNoticeEmail(user: Identity)(implicit request: RequestHeader): (Option[Txt],Option[Html]) = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:145: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] (None,Some(securesocial.views.html.mails.passwordChangedNotice(user))) [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/CustomTemplatesPlugin.scala:155: could not find implicit value for parameter env: securesocial.core.RuntimeEnvironment[_] [error] securesocial.views.html.notAuthorized() [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:4: object Token is not a member of package securesocial.core.providers [error] import securesocial.core.providers.Token [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:5: object IdentityId is not a member of package securesocial.core [error] import securesocial.core.IdentityId [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:25: not found: type Identity [error] passwordInfo: Option[PasswordInfo] = None) extends Identity { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:16: not found: type IdentityId [error] identityId: IdentityId,[error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:30: not found: type IdentityId [error] implicit val identityIdFormat = Json.format[IdentityId] [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:35: Unapply of object LoginUser has no parameters. Are you using an empty case class? [error] implicit val storageFormat = Json.format[LoginUser] [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:39: not found: type IdentityId [error] implicit val identityIdFormat = Json.format[IdentityId] [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:49: not found: type Identity [error] def apply(user: Identity): Option[LoginUser] = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:58: not found: type UserServicePlugin [error] class UserService(application: Application) extends UserServicePlugin(application) { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:59: not found: type Token [error] private var tokens = Map[String,Token]() [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:69: not found: type Identity [error] def find(id: IdentityId): Option[Identity] = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:69: not found: type IdentityId [error] def find(id: IdentityId): Option[Identity] = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:72: No Json formatter found for type security.LoginUser. Try to implement an implicit Format for this type. [error] val futureUser = UserServiceLogin.find(Json.obj("identityId" -> Json.toJson(id))).one [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:86: not found: type Identity [error] def findByEmailAndProvider(email: String,providerId: String): Option[Identity] = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:88: No Json formatter found for type security.LoginUser. Try to implement an implicit Format for this type. [error] val futureUser = UserServiceLogin.find(Json.obj("email" -> email)).one [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:97: not found: type Identity [error] def save(user: Identity): Identity = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:97: not found: type Identity [error] def save(user: Identity): Identity = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:117: not found: type Token [error] def save(token: Token) = { [error] ^ [error] /Users/alberto/git/recommendation-system/app/security/UserService.scala:130: not found: type Token [error] def findToken(token: String): Option[Token] = { [error] ^ [error] /Users/alberto/git/recommendation-system/conf/routes:41: value resetPassword is not a member of securesocial.controllers.Registration [error] GET /reset/:token @securesocial.controllers.Registration.resetPassword(token) [error] /Users/alberto/git/recommendation-system/conf/routes:36: value startResetPassword is not a member of securesocial.controllers.Registration [error] POST /signup @securesocial.controllers.Registration.startResetPassword [error] /Users/alberto/git/recommendation-system/conf/routes:42: value handleResetPassword is not a member of securesocial.controllers.Registration [error] POST /reset/:token @securesocial.controllers.Registration.handleResetPassword(token) [error] /Users/alberto/git/recommendation-system/conf/routes:49: value notAuthorized is not a member of securesocial.controllers.ProviderController [error] GET /not-authorized @securesocial.controllers.ProviderController.notAuthorized [error] /Users/alberto/git/recommendation-system/conf/routes:36: value startResetPassword is not a member of securesocial.controllers.Registration [error] POST /signup @securesocial.controllers.Registration.startResetPassword [error] /Users/alberto/git/recommendation-system/conf/routes:39: value startResetPassword is not a member of securesocial.controllers.Registration [error] GET /reset @securesocial.controllers.Registration.startResetPassword [error] /Users/alberto/git/recommendation-system/conf/routes:40: value startResetPassword is not a member of securesocial.controllers.Registration [error] POST /reset @securesocial.controllers.Registration.startResetPassword [error] /Users/alberto/git/recommendation-system/conf/routes:41: value resetPassword is not a member of securesocial.controllers.Registration [error] GET /reset/:token @securesocial.controllers.Registration.resetPassword(token) [error] /Users/alberto/git/recommendation-system/conf/routes:42: value handleResetPassword is not a member of securesocial.controllers.Registration [error] POST /reset/:token @securesocial.controllers.Registration.handleResetPassword(token) [error] /Users/alberto/git/recommendation-system/conf/routes:49: value notAuthorized is not a member of securesocial.controllers.ProviderController [error] GET /not-authorized @securesocial.controllers.ProviderController.notAuthorized [error] /Users/alberto/git/recommendation-system/app/views/secure/login.scala.html:5: object Registry is not a member of package securesocial.core [error] @import securesocial.core.AuthenticationMethod._ [error] ^ [error] /Users/alberto/git/recommendation-system/app/views/secure/login.scala.html:35: not found: value Registry [error] @defining( Registry.providers.all.values.filter( _.id != UsernamePassword) ) { externalProviders => [error] ^ [error] /Users/alberto/git/recommendation-system/app/views/secure/provider.scala.html:4: object Registry is not a member of package securesocial.core [error] @import securesocial.core.IdentityProvider [error] ^ [error] /Users/alberto/git/recommendation-system/app/views/secure/provider.scala.html:8: object RoutesHelper is not a member of package securesocial.core.providers.utils [error] @import play.api.Logger [error] ^ [error] /Users/alberto/git/recommendation-system/app/views/secure/provider.scala.html:12: not found: value Registry [error] @Registry.providers.get(providerId).map { provider => [error] ^ 谢谢 解决方法
在2.1.4和master之间的securesocial中进行了巨大的重构.
整个插件系统已被刮掉,有利于注入的组件.已删除Identity和IdentityId特征,现在您自己的类型参数化了Actions. UserService API也发生了很大的变化,从同步变为异步. 该文档目前仍在进行中.您将不得不查看samples以了解这一切是如何组合在一起的. @编辑 关于视图模板: 如果查看Global中的示例,它会创建一个对象MyRuntimeEnvironment object MyRuntimeEnvironment extends RuntimeEnvironment.Default[DemoUser] { override lazy val routes = new CustomRoutesService() override lazy val userService: InMemoryUserService = new InMemoryUserService() override lazy val eventListeners = List(new MyEventListener()) } 您可以创建自己的ViewTemplate并在此处覆盖: object MyRuntimeEnvironment extends RuntimeEnvironment.Default[DemoUser] { override lazy val routes = new CustomRoutesService() override lazy val userService: InMemoryUserService = new InMemoryUserService() override lazy val eventListeners = List(new MyEventListener()) override lazy val viewTemplates = new ViewTemplates{ override def getLoginPage(form: Form[(String,String)],msg: Option[String])(implicit request: RequestHeader,lang: Lang): Html = ??? override def getPasswordChangePage(form: Form[ChangeInfo])(implicit request: RequestHeader,lang: Lang): Html = ??? override def getNotAuthorizedPage(implicit request: RequestHeader,lang: Lang): Html = ??? override def getStartSignUpPage(form: Form[String])(implicit request: RequestHeader,lang: Lang): Html = ??? override def getSignUpPage(form: Form[RegistrationInfo],token: String)(implicit request: RequestHeader,lang: Lang): Html = ??? override def getResetPasswordPage(form: Form[(String,lang: Lang): Html = ??? override def getStartResetPasswordPage(form: Form[String])(implicit request: RequestHeader,lang: Lang): Html = ??? } } 当然我不建议在那里实际实现它,正确的方法是创建 class CustomViewTemplates extends ViewTemplates{ //... } 然后 override lazy val viewTemplates = new CustomViewTemplates() ViewTemplates的默认实现位于 相同的机制可用于每个“旧”插件(userService,authenticator商店,IdGenerator,PasswordValidator,邮件模板等)实际列表实际上可以从 设计已更改为允许基于编译和运行时的依赖项注入.它可能(不幸的是)必须再次使用play 2.4和play 3.0进行更改,这将使运行时DI成为框架的一等公民(同时仍支持编译时注入) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |