gpt4 book ai didi

java - 如何在 Play Framework 2.5 模板中注入(inject)应用程序

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:37 26 4
gpt4 key购买 nike

在 Play Framework 的新版本 2.4/2.5 中,他们进一步朝着注入(inject)所有内容和删除服务器状态的方向发展。 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

如何在我的模板中注入(inject) 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>

Controller 函数:

public Result index() {
return ok(views.html.index.render("home"));
}

最佳答案

您可以使用 Play.current() 获取应用程序或在 Controller 中注入(inject)应用程序,如 question 中所述。 .该模板应获得类型为 play.Application 的参数。

应该是这样的

模板,假设是 injectappexample.scala.html:

@(app: play.Application)
.... use the app object

Controller :

public class SomeController extends Controller {
Provider<Application> applicationProvider;

@Inject
public SomeController(Provider<Application> applicationProvider) {
this.applicationProvider = applicationProvider;
}

public Result injectAppExample() {
return ok(injectappexample.render(applicationProvider.get());
}
}

值得重新考虑将应用程序对象发送到模板。如果您应该发送特定的配置属性值,请在 Controller 中注入(inject)配置,从配置对象中获取值并将其发送到模板。在这种情况下,根本不需要注入(inject)应用程序。

模板:

@(value: String)
.... use the value

Controller :

public class SomeController extends Controller {
Configuration configuration;

@Inject
public SomeController(Configuration configuration) {
this.configuration = configuration;
}

public Result injectAppExample() {
return ok(injectappexample.render(configuration.getString("SOME_PROPERTY"));
}
}

关于java - 如何在 Play Framework 2.5 模板中注入(inject)应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39255914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com