如何使用Play框架和Java为所有动态URL提供相同的静态.html文件?

时间:2017-07-21 08:23:20

标签: java html scala playframework


我正在尝试提供一个静态html文件,让我们为index.html之类的所有动态网址调用/tachyon/someId。此someId是动态生成的。我尝试了多种方法来做到这一点,但都失败了。这就是我所尝试过的。

  • 尝试为GET网址controllers.Assets.at(path="/public", file="index.html")添加/tachyon/*someId。这说错了参数someId。
  • 通过渲染尝试渲染index.html。由于index.html不是scala.html模板,因此也失败了。
  • 尝试通过控制器返回routes.Assets.at("index.html")。这也失败了,因为我想返回Result,但方法的返回类型不同。
  • 尝试通过控制器返回ok(routes.Assets.at("index.html")。这也失败了说没有有效的呼叫确定。

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

2 个答案:

答案 0 :(得分:0)

我认为您可以使用Twirl生成页面。由于您需要静态html,因此可以忽略正文中的参数。

所以在路线中,添加:

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

在控制器的索引功能中,您可以返回

Ok(views.html.somepage(someId))

然后在views文件夹中创建somepage.scala.html Twirl函数,但不要在正文中使用someId。

答案 1 :(得分:0)

我得到了它的工作。不确定它是否是正确的解决方案。我通过将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"); 。这样的事情。

SUM

如果没有使用scala模板,是否有更好的方法可以告诉我。

由于