【问题标题】:In Playframework2, how to serve multiple asset directory?在 Play Framework 2 中,如何提供多个资产目录?
【发布时间】:2015-05-09 17:51:38
【问题描述】:

资产目录有两个,一个是/ui/dist,一个是/public。我试着写这样的路线:

GET            /assets/*file                        controllers.Assets.at(path="/public", file)
GET     /ui/*file               controllers.Assets.at(path="/ui/dist", file)

但是编译的时候会报错:

[error] Unspecified value parameter file.
[error]         <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">

有没有人知道如何解决这个问题...

【问题讨论】:

  • 我想你在找this

标签: scala playframework playframework-2.0 sbt assets


【解决方案1】:

尝试为每一个创建一个单独的路由器对象:

package controllers

object PublicAssets extends controllers.AssetsBuilder
object UiDistAssets extends controllers.AssetsBuilder

然后在你的路线中:

GET     /assets/*file   controllers.PublicAssets.at(path="/public", file)
GET     /ui/*file       controllers.UiDistAssets.at(path="/ui/dist", file)

我认为您的尝试中发生的事情是反向路由器正在为您的公共路由生成一个对象,然后另一个具有相同名称的 ui 路由覆盖第一个(如果有人更准确地知道,请纠正我.) 解决方案应该以不同的方式命名您的资产类别,因此生成的反向路由同样具有不同的名称(或者,将它们称为相同的东西,但将它们放在不同的包中。)

【讨论】:

    【解决方案2】:

    发现关键是给routes.Assets.at传入另一个参数,以下来自playframeworkAsset document

    GET  /javascripts/*file        Assets.at("public/javascripts", file)
    GET  /images/*file             Assets.at("public/images", file)
    

    那么你需要在使用反向路由器时指定这两个参数:

    <script src="@routes.Assets.at("public/javascripts", "jquery.js")"></script>
    <image src="@routes.Assets.at("public/images", "logo.png")">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 2015-11-07
      • 2013-10-28
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多