Flash不显示任何消息

时间:2014-01-06 10:54:41

标签: scala playframework playframework-2.2

我有一个_flash子模板:

@(flash: Flash)

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

此代码从不显示任何Flash消息。下面的代码不起作用

@if(!flash.isEmpty) {
    @for((msgKey, msgValue) <- flash) { 
        <div class="alert alert-@msgKey" 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子模板中显示所有消息。

更新:我意识到为什么第一种方法不起作用(我必须使用地图)。但是为什么第二个会在运行时引发错误?

1 个答案:

答案 0 :(得分:3)

语法错误,您错过了闪存。数据。从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 alert-@msgKey" 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>
    }