我试图在控制器中进行切换,将JPA检索到的项目作为List发送到模板引擎,现在将它们作为JSON发送。
我更喜欢使用flexJSON库来完成任务。
我所拥有的是具有以下方法的应用程序控制器:
public static Result index() {
... Processing ...
flash("success", "Items have been processed");
return ok(index.render(Item.all()));
}
和视图index.scala.html一样:
@(items: List[Item])
@import helper._
@main("Item list") {
<h1>@items.size() items(s)</h1>
<ul>
@for(item <- items) {
<li>
@item.title
</li>
}
</ul>
}
这些可以完美地显示所有已处理项目的未编号列表。
现在,如果我将控制器更改为使用flexJSON,如下所示:
public static Result getItems() {
List<Item> items = Item.all();
String s = new JSONSerializer().exclude("*.class", "description").serialize(items);
flash("success", "Messages have been processed");
return ok(index.render(s));
}
如何编程我的模板以便使用json字符串项? 我试图在这个问题上关注这个博客http://www.jamesward.com/2011/12/11/tutorial-play-framework-jpa-json-jquery-heroku,但是在我的模板视图中如何使用json ......我们非常感谢任何代码示例。
答案 0 :(得分:9)
Just Sample it可能对您有帮助。
application.conf
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
ebean.default="models.*"
路由
GET / controllers.Application.index()
GET /cities controllers.Application.all()
Controller =&gt; Application.java
package controllers;
import play.*;
import play.mvc.*;
import models.City;
import play.libs.Json;
import views.html.*;
public class Application extends Controller {
public static Result index() {
return ok(index.render());
}
public static Result all(){
City pune=new City();
pune.name="pune";
pune.save();
City mumbai=new City();
mumbai.name="mumbai";
mumbai.save();
return ok(Json.toJson(City.all()));
}
}
Template =&gt; index.scala.html
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
<script src="@routes.Assets.at("javascripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
</head>
<body>
<div id="content"></div>
<script type="text/javascript">
$(function(){
get_cities();
});
var get_cities = function() {
$.ajax({
url: '@routes.Application.all()',
processData:false,
type: 'GET',
beforeSend:function(jqXHR, settings){
jqXHR.setRequestHeader("Content-Type", "application/json");
},
success: function(data, textStatus, jqXHR){
process_cities(data);
},
error: function(jqXHR, textStatus, errorThrown){
},
complete: function(jqXHR,textStatus){
}
});
};
var process_cities = function(cities){
var contentDiv=$("div#content");
contentDiv.append("<ul>");
$.each(cities,function(i,city){
contentDiv.append("<li>" + city.name + "</li>");
});
contentDiv.append("</ul>");
};
</script>
</body>
</html>