【问题标题】:How to serve same static .html file for all dynamic urls using Play framework and Java?如何使用 Play 框架和 Java 为所有动态 url 提供相同的静态 .html 文件?
【发布时间】:2017-07-21 08:23:19
【问题描述】:


我正在尝试提供一个静态 html 文件,我们将其命名为 index.html,用于所有动态 url,例如 /tachyon/someId。这个someId 是动态生成的。我尝试了多种方法来做到这一点,但都失败了。这就是我所尝试的所有方法。

  • 尝试为 GET url /tachyon/*someId 添加 controllers.Assets.at(path="/public", file="index.html")。这失败了,说缺少参数 someId。
  • 尝试通过渲染渲染index.html。这也失败了,因为 index.html 不是 scala.html 模板。
  • 尝试通过控制器返回routes.Assets.at("index.html")。这也失败了,因为我想返回 Result 但方法的返回类型不同。
  • 尝试通过控制器返回ok(routes.Assets.at("index.html")。这也未能说明不是有效的 Call for ok。

如果有办法通过控制器执行此操作并将Resulttask helper 类中的方法返回到task 会更好,因为我正在从task 类中的方法返回Promise<Result>

【问题讨论】:

    标签: java html scala playframework


    【解决方案1】:

    我认为您可以使用 Twirl 来生成页面。既然要静态html,可以忽略body中的参数。

    所以在路线中,添加:

    GET /tachyon/*someId   somecontroller.index(someId)
    

    在控制器的索引函数中,可以返回

    Ok(views.html.somepage(someId))
    

    您在views 文件夹中创建了一个somepage.scala.html Twirl 函数,但不要在body 中使用someId。

    【讨论】:

      【解决方案2】:

      我让它工作了。不确定这是否是正确的解决方案。我通过将index.html 转换为字节数组,然后使用ok 使用ByteArrayInputStream 进行渲染来渲染它。像这样的。

      File file = Play.getFile("path to the file", Play.current());
      byte[] byteArray = IOUtils.toByteArray(new FileInputStream(file));
      return ok(new ByteArrayInputStream(byteArray)).as("text/html");
      

      如果不使用 scala 模板,是否有更好的方法可以让我知道。

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 2021-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多