2014-01-06 130 views
0

我有一個_flash子模板:Flash不顯示任何消息

@(flash: Flash) 

@flash.data.foreach { x => 
    @x._1, @x._2 
} 

此代碼永遠不會顯示任何提示信息。下面的代碼不起作用

@if(!flash.isEmpty) { 
    @for((msgKey, msgValue) <- flash) { 
     <div class="alert [email protected]" data-dismiss="alert">  
      <a title="@Messages("misc.message.close")" class="close">×</a> 
      @msgKey 
     </div> 
    } 
} 

由於運行時出錯:filter is not a member of Flash。奇怪的是,下面的代碼不工作,並顯示一條消息:

@flash.get("success") 

如何設置消息並不重要,因爲它運作良好,在過去的情況下,然而,有它的代碼:

if (success) { 
    Redirect(routes.Application.success).flashing("success" -> "Ok123") 
} else { 
    Ok(views.html.registration.add(newForm)) 
} 

我的目標是循環播放Flash,因爲它想顯示_flash子模板中的所有消息。

UPDATE:我意識到爲什麼第一種方法不起作用(我不得不使用map)。但是爲什麼第二個在運行時提出錯誤?

回答

3

語法錯誤,您錯過了flash。 數據。從Play 2.0 API我們看到,Flash是一個

case class Flash (data: Map[String, String]) extends Product with Serializable

所以正確的代碼應該是:

@if(!flash.isEmpty) { 
    @for((msgKey, msgValue) <- flash.data) { 
     <div class="alert [email protected]" data-dismiss="alert">  
      <a title="@Messages("misc.message.close")" class="close">×</a> 
      @msgKey 
     </div> 
    } 
} 

我幾乎可以肯定,這是編譯時錯誤,你看到它在運行時只因爲你使用開發模式。 順便說一句,我通常做這樣的事情:

@()(implicit flash: play.api.mvc.Flash) 

@flash.get("success").map { message => 
     <div class="alert alert-success alert-dismissable"> 
      <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button> 
      @message 
     </div> 
    } 

    @flash.get("failure").map { message => 
     <div class="alert alert-danger alert-dismissable"> 
      <a class="close" data-dismiss="alert">×</a> 
      @message 
     </div> 
    } 
+0

關於你的方法:如果有超過2種消息類型? –

+0

如果您有很多消息類型,則您的方法完全正確。但是,如果你有十個爲什麼要用迭代器,你已經重構了顯示邏輯到一個文件中,所以我認爲只需在模板中列出這些類型是可以接受的。 – vitalii