6

我收到此错误:

编译错误【包views.json.Runs不存在】

当它显然确实存在时。我不知道我做错了什么。

控制器中的操作Runs

@BodyParser.Of(play.mvc.BodyParser.Json.class)
public static Result view(Long task_id, Long run_id) {
    Run run = Run.find.byId(run_id);
    return ok(views.json.Runs.view.render(run));
}

app/views/Runs/view.scala.json

@(run: Run)

{
    "started": "@run.started",
    "completed": "@run.completed"
}

我已经得到了一些 html 模板,但这是我在 2.0 中尝试过的第一个 JSON 模板。我不确定还有什么可以尝试的,因为它已经尽可能基本了。有人有想法么?

更新:我已经收到了一些解决方法的建议,但我仍然想知道如何让模板工作,如果只是为了更好地理解对 2.0 的更改。

4

4 回答 4

7

默认情况下似乎只支持 html、xml 和 txt。对于其他文件扩展名和格式,您必须在其中注册额外的“templateTypes” $PLAY_HOME/framework/src/sbt-plugin/src/main/scala/PlaySettings.scala(另请参阅:SBT 设置,靠近底部)。

查看$PLAY_HOME/framework/src/play/src/main/scala/play/api/templates/Templates.scala.

您也可以作弊并从 txt 文件中提供您的 json,但response().setContentType("application/json")在调用该render方法之前执行此操作。

于 2012-06-29T23:17:04.403 回答
3

对于 Json,为什么不直接使用Json 助手生成 Json 字符串:

public static Result view(Long task_id, Long run_id) {
    Run run = Run.find.byId(run_id);
    return ok(play.libs.Json.toJson(run));
}
于 2012-06-29T20:40:17.217 回答
2

我建议遵循文档并让 Json 库序列化您的数据,而不是自己编写 Json 文本:请参阅 Serving Json Response

于 2012-06-29T20:44:25.950 回答
0

我还是不明白,为什么人们想用视图渲染他们的 JSON。

注意:这与@nico_ekito 之前展示的方式相同,我完全同意他的看法,下面的代码仅演示了如何为 JSON 选择对象的一部分

public static Result view(Long task_id, Long run_id){

    Run run = Run.find.byId(run_id);

    ObjectNode result = Json.newObject();
    result.put("started", run.started);
    result.put("completed", run.completed);

    return ok(Json.toJson(result));

}
于 2012-06-29T21:15:32.643 回答