Могу ли я вызвать сеанс в шаблоне/представлении в Play Framework

Я новичок в использовании Play Framework 2.0 (я использую Scala) и задаю вопрос о сеансах.

Я родом из фона Ruby on Rails, поэтому я склонен думать обо всем, что я узнал в Play Framework относительно Ruby on Rails.

Имея это в виду, есть ли какой-либо способ для вызова вещей, хранящихся в сеансе, пока я нахожусь в представлении?

Если у меня есть "hello" → "world", хранящийся в сеансе, я хочу иметь возможность делать что-то вроде @session.get( "hello" ) и иметь возможность использовать "мир" в представлении. Возможно ли это?

Другой вариант, который я вижу, заключается в том, чтобы сохранить значение в переменной в контроллере и передать это вместе с представлением, выполняя что-то вроде OK (var), но этот способ кажется довольно неуклюжим, особенно если я начну использовать больше переменных.

Спасибо!

Ответ 1

Сеансы в Play Store в файлах cookie и действительно предназначены только для данных перекрестных запросов. Если это то, что вы хотите, вы можете использовать @session.get("hello"), но то, что вы действительно можете использовать, - это способ передать материал из контроллеров в шаблоны, не указывая их в качестве параметров. В этом случае см. Очень подробный ответ на этот вопрос: fooobar.com/questions/7544/...

Ответ 2

Да, вы можете использовать @session.get("hello") в шаблоне, однако, похоже, вам нужно указать по крайней мере неявный параметр с именем "session" в начале шаблона при использовании шаблонов с контроллерами Scala:

@()(implicit session: play.api.mvc.Session) 

Также существует область flash - она ​​отличается от session тем, что она живет только для одного запроса и не подписана. Поэтому он чаще всего используется только для транспортировки сообщений об ошибках /inf.

См. Сессия и флэш области doc

Наконец, поскольку каждый шаблон является только функцией Scala, вы также можете вызвать некоторые действия с вашего контроллера и получить данные сеанса

Ответ 3

Вы можете определенно вызвать сеанс ur в шаблонах воспроизведения.

Попробуйте этот код - он работает в представлениях:

$session.session_variable_name;