哪些是默认情况下模板上可用的隐式对象?

Per*_*ega 12 scala playframework-2.0

我正在尝试为Play Framework 2.0创建一个插件(截至今天,2011年12月10日,Github上的最新代码).该插件必须在视图中呈现一些数据.为了避免强制用户修改所有模板,我创建了一个标签,用于检索和呈现相关数据.

为了避免并发问题,应该将数据存储在用户的标识符中.该标识符仅需要在请求期间有效(会话ID,请求本身等),在请求结束后,信息将被丢弃.

问题是Request,RequestHeader和Session都不能作为Scala模板中的隐式值.那么,哪些是模板中可用的隐含值

如果没有我可以使用的,你对如何获取我可以从模板和控制器访问的值(无需用户既不修改控制器或模板)以及可以生成的值有任何建议吗?请求依据?

Bra*_*ace 7

我发现了

仍然可用,而隐含对象errors,out,params,并play从1.x中已被删除.看起来这个列表由play.mvc.Http.Context.Implicit决定,其javadoc说"在模板中导入以获取隐式HTTP上下文".所以我非常有信心这是自动提供的完整列表.

还有一@Messages件事似乎取代了messages隐含的对象以及&{'my.message.key'}1.x 的语法.它实际上是方法调用的简写,而不是隐式对象.您可以执行@Messages("my.message.key")调用play.Messages.get(String,Object ...),或者您可以强制某种语言使用@Messages("index.title")(Lang("es"))@Messages("index.title")(Lang("es-ar"))调用play.Messages.get(Lang,String,Object ...).


and*_*lla 5

是的,这对我来说也是一个问题......

实际上,他们可以拥有一个implicit但仍然必须添加到参数列表中并在Action中声明所需的对象implicit.

我是这样做的:

模板

// **FIRST** add the needed implicit parameter to the template (the whole template will be created as a function will the related parameters, incl. curryed parameters list are handled) 
@(stuff:models.MyStuff)(implicit request: play.api.mvc.Request[Any])

@import helper._

@main("Home"){

}
Run Code Online (Sandbox Code Playgroud)

调节器

object Main extends Controller {
  def index = Action {
    // **SECONDLY** declare the request as implicit.
    implicit request =>
      Ok(views.html.index(MyStuff()))
    }
}
Run Code Online (Sandbox Code Playgroud)

更多?

由于一个implicit参数有效,您可以将所需对象包装在专用结构中并将其声明为implicit.

  • 实际上,似乎变量session,request,response和flash在scala模板中神奇地可用;-) (2认同)