Playframework - 如何在 app/views 下创建子包?

Playframework - How to create subpackages under app/views?

我使用的是 Play 2.4(Java 版本),但我也对 >2.4 的解决方案感兴趣。这是我的问题。我想在 app/views 下构建我的模板文件夹的内容。所以我想在 app/views 下创建一些子包,但出现编译错误。这是我到目前为止所尝试过的:

  1. 通过eclipse创建新的子包

    app/views/mediaViewers

  2. 在里面放一个模板standardViewer.scala.html

    app/views/mediaViewers/standardViewer.scala.html

  3. 尝试通过

    从控制器class访问模板

    views.mediaViewers.html.standardViewer.render()

  4. 重建游戏项目

    activator clean; activator clean-files; activator run

调用适当的路由时,我得到:

[error] .../Viewers.java:18: package views.mediaViewers.html does not exist
[error] views.mediaViewers.html.standardViewer
[error] ..../Viewers.java:21: package views.mediaViewers.html does not exist
[error] views.mediaViewers.html.standardViewer
[error] .../app/controllers/Viewers.java:24: package views.mediaViewers.html does not exist
...

[error] (compile:compileIncremental) javac returned nonzero exit code
[error] application - 

! @765kicfe1 - Internal server error, for (GET) [/] ->

play.sbt.PlayExceptions$CompilationException: Compilation error[package views.mediaViewers.html does not exist]
...

控制器中的包路径错误!使用此模式:

`views.html.your-package-goes-here.your-template-goes-here.render()`

或更具体:

  1. Try to access the template from controller class via

views.mediaViewers.html.standardViewer.render()

必须是:

views.html.mediaViewers.standardViewer.render()

为了从控制器调用视图模板,您应该始终在视图名称前加上 "views.html",因此对 standardViewer.scala.html 的调用将是:

views.html.mediaViewers.standardViewer

如果您查看 target/scala-/twirl 下生成的文件,就可以验证这一点,如图所示: project structure