2013-03-18 3 views
0

В моем текущем контроллере я передаю флэш сообщение, как описано в docsPlay2 и Flash Scope, почему я не могу распечатать свое сообщение?

контроллер:

def test(token: String) = Action { 
     Ok(views.html.mobile.smsReview(smsReviewForm.fill(model), grades, smstoken.get.token)) 
     .flashing("success" -> Messages("sms.form.write.review")) 
     } 
    } 

мой взгляд:

@(smsReviewForm: Form[SmsReview], grades: Seq[Grade], smstoken: String)(implicit request: RequestHeader) 

...

@request.flash.get("success").getOrElse("HELLO!").map { msg => 
     <div class="alert alert-info"> 
      @msg 
     </div> 
    } 

Во взгляде HELLO! печатается, а не мое сообщение. Но если я проверю заголовки в Chrome, мое сообщение есть:

Content-Length:3596 
Content-Type:text/html; charset=utf-8 
Set-Cookie:PLAY_FLASH=success%3AHej%21+Skriv+din+rekommendation+nedan; Path=/; HTTPOnly 

Что я пропустил?

ответ

2

Область флэш-памяти используется для «флеш» сообщения для следующего запроса. Это используется, главным образом, при перенаправлении на другую страницу. Наиболее распространенным вариантом использования является перенаправление в конце сообщения формы.

Первая часть документации состояний этого:

Если вы должны хранить данные на нескольких запросов HTTP, вы можете сохранить их в сессии или флэш-диапазонах. Данные, хранящиеся в сеансе, доступны в течение всего сеанса пользователя, а данные, хранящиеся в области Flash, доступны только для следующего запроса.

В вашем случае вы можете просто передать сообщение непосредственно в представление, так как у вас есть сообщение, доступное во время визуализации представления.

0

С HTTP Cookie страницы в Википедии

Set-Cookie является директивой для браузера, чтобы сохранить куки и отправить его обратно в будущих запросов к серверу ...

Видя SET_COOKIE заголовок в ответе указывает, что последующие запросы, которые вы посылаете на сервер, отправят cookie, а просмотренные представления будут иметь доступ к данным в области флэш-памяти (при условии, что вы добавите (implicit flash: Flash) в определение функции шаблона).

Как указано в EECOLOR, вам просто нужно передать данные на ваш взгляд в качестве параметра. В этом случае нет необходимости использовать флэш-область.

Ниже приведена адаптация вашего кода для передачи сообщения String к представлению в качестве параметра.

Контроллер

def test(token: String) = Action { 
    Ok(views.html.mobile.smsReview(smsReviewForm.fill(model), grades, smstoken.get.token, "sms.form.write.review")) 
} 

Посмотреть

@(smsReviewForm: Form[SmsReview], grades: Seq[Grade], smstoken: String, message: String)(implicit request: RequestHeader) 
... 
<div class="alert alert-info">@message</div>