Неоднозначные значения в Lang и requestLang

Использование: PlayFramework 2.3 и SecureSocial (версия, совместимая с 2.3)

Я получаю эту ошибку в ViewTemplate:

[error] /Users/einevea/projects/einjar/einevault/econcepts/modules/eusers/app/services.eusers/MyViewTemplates.scala:29: 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]   override def getStartSignUpPage(form: Form[String])(implicit request: RequestHeader, lang: Lang): Html = views.html.eusers.custom.startSignUp(WUPage(Messages("securesocial.signup.title")),form)(request, lang, env)

Любая помощь?


person Daniel Conde Garcia    schedule 05.10.2014    source источник


Ответы (1)


Сообщение об ошибке означает, что вы попытались вызвать getStartSignUpPage, и он принимает неявный play.api.i18n.Lang, но в вашей области есть два неявных экземпляра Lang, поэтому компилятор не знает, какой из них выбрать.

Первый — это значение lang, которое вы импортировали или определили (либо как значение в шаблоне, либо как неявный параметр в списках параметров шаблона).

Второй — встроенный, полученный из play Controller.request2Lang, который знает, как извлечь язык из запроса, чтобы выбрать язык, который браузер сказал, что он принимает (в заголовке Accept-Language).

Вы можете обойти это несколькими способами: избежать двух экземпляров Lang в области видимости, указать параметры явно там, где вы вызываете getStartSignUpPage, или сделать список неявных параметров обычным списком параметров.

person johanandren    schedule 05.10.2014
comment
Спасибо за объяснение, Джонхан, я указал параметры явно, и теперь это сработало. - person Daniel Conde Garcia; 07.10.2014