1

JPAが取得したアイテムをリストとしてテンプレートエンジンに送信して、これらを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 を使用する方法がわかりません。私のテンプレートビュー...コード例は大歓迎です。

4

1 に答える 1

9

ちょうどサンプルがあなたを助けるかもしれません。

アプリケーション.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()

コントローラ => 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()));
      }


}

テンプレート => 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>
于 2012-07-05T17:52:47.903 に答える