2016-07-30 3 views
0

Мне нужно передать некоторую переменную неявно при создании URL-адресов в представлениях.Play framework 2: неявные значения в представлении

У меня есть действие в контроллере:

class HomeController extends Controller{ 

    def index(implicit lang: Lang) = Action.async { implicit request => { 
     Future[Result] { 
     Ok(views.html.home.index(lang)) 
     } 
    } 

    ... 
    } 

Вот фрагмент index.scala.html:

@()(implicit lang: Lang) 
@main("Home page") { 
    <ul> 
     <li><a href="@routes.HomeController.index()"><span>Home</span></a> 
    ... 
    </ul> 
} 

Но у меня есть ошибка компиляции в @ routes.HomeController.index (), Недостаточно аргументов для метода

Почему это ошибка? Как я могу использовать переменные pass при создании URL?

+0

Извлеките круглые скобки из обратного вызова маршрутизации: '@ routes.HomeController.index'. Хотя у вас могут возникнуть проблемы с попыткой использовать неявный 'Lang' метод' index'. –

+0

Я пробовал это, все еще не работаю. «отсутствующие аргументы для индекса метода в классе ReverseHomeController» – Teimuraz

+0

сохранить parens и попробовать 'def index() (implicit lang: Lang)' –

ответ

1

Попробуйте это:

class HomeController extends Controller { 
def index = Action.async { implicit request => { 
     Future[Result] { 
     Ok(views.html.home.index) 
     } 
    } 
    ... 
    } 

Не Явно передать языки параметров в функцию. Воспроизведение Controller содержит имплицитное преобразование из запроса в lang, причем этот язык будет автоматически представлен в вашем представлении.

+0

Я должен использовать lang param в методе индекса, потому что я определил маршруты следующим образом: GET/$ lang controllers.HomeController.index (lang: play.api.i18n.Lang). В принципе, мне не нужно передавать параметр lang param в методе индекса, мне просто нужна часть в маршруте/, (Фактический распознаватель языка - это обработчик в фильтре, это Мне нужно только для маршрутов). Но wihtout/$ lang ... это не работает, и если я предоставляю $ lang в шаблоне маршрута, то я должен передать его методу индекса, иначе я получаю ошибку компилятора – Teimuraz

+0

Я не уверен, что я понимаю вашу проблему , но если вы хотите сохранить lang param в методе, то позже вам нужно rednder просмотреть этот способ 'Ok (views.html.home.index() (lang))' – mgosk

Смежные вопросы