【发布时间】:2016-08-31 17:44:18
【问题描述】:
随着 Play Framework 的新版本 2.4/2.5,他们进一步向注入所有内容和移除服务器状态的方向发展。 play.Play.application() 现在已弃用。 但是,我需要在我的模板中使用该应用程序(例如,让所有支持的语言显示在带有 play.i18n.Lang.availables(play.Play.application()) 的所有页面上)。
我知道我可以:
- 将
play.Application明确传递给我的所有模板。 - 向我的模板添加一个隐式参数,例如
@()(implicit app: play.Application)。但是,在我的 Java 项目中,它并不是真正隐式的,每次渲染模板时我都必须传递它。 -
Create a Scala object providing the application implicitly。但是,这也需要弃用的
play.api.Play.current。
如何在我的模板中注入play.Application?
---- 更新:----
到目前为止,我已经尝试过,我创建了以下设置:
index.scala.html:
@(title: String)
@template(title) { //here is the play.Application obviously missing, however I don't want to pass it in every template - even worse in every Controller <-- this is the core of my question
Welcome to my page!
}
template.scala.html:
@(title: String)(content: Html)(implicit app: play.Application)
<html>
<head>
<title>@title</title>
</head>
<body>
<p>Is live? @app.isProd</p>
@content
</body>
</html>
控制器功能:
public Result index() {
return ok(views.html.index.render("home"));
}
【问题讨论】:
-
play.Application 到底需要做什么?
-
我想列出所有可用的语言,如
new play.api.i18n.DefaultLangs(play.Play.application().configuration()).availables()以显示语言切换器。 -
我已将答案作为您的要求。如果您对此有任何疑问,请告诉我。 :)
-
不幸的是,没有。我仍在寻找一种方法来inject 我的模板。到目前为止,所有答案都需要我将其传递给我的所有模板。 play.Application 只是一个例子,我也不知道怎么注入 play.Configuration 之类的东西。
-
所以基本上你正在努力注入任何东西吧??
标签: java templates playframework playframework-2.0 playframework-2.5