2011-05-26 72 views
6

我試圖消耗JSON數組我使用JavaScript創建,但陣列永遠不會在我的控制器消費JSON玩!框架控制器

這裏必然是我用來調用我的控制器操作的JavaScript代碼

$.post("/produits_ajax",{filterParams:[{name:"milk", value:"chevre"}, {name:"pate", value:"molle"}]}, 
function(data){ 
    $('.dynamicContent').html(data); 
slideProducts(); 
// initialize scrollable 
$(".scrollable").scrollable(); 

}); 

我路線文件條目

POST  /produits_ajax  Application.produitsAjax 

以下是我在遊戲中收到的內容!控制器。我使用的是玩1.1和JsonArray是com.google.gson.JsonArray

public static void produitsAjax(JsonArray filterParams) { 
    if(filterParams != null) 
     Logger.debug("Le Json: " + filterParams.toString()); 
    else 
     Logger.debug("filterParams is null"); 

    render(); 
} 

正如你可以想像我總是得到「filterParams爲空」在我的控制檯(我也不會,如果我扭動着這個不是)

這是非常基本的目前爲止,我只是想將JS中生成的數組綁定到我的JsonArray。 Play!框架有一個很棒的文檔,但由於某些原因,這個特定的主題很少。

如果任何人都可以在此這將是非常讚賞

回答

17

你只需要創建一個TypeBinder類添加JSONObject的結合能力自己粘結劑玩!實際上,在Play 1.2中這很容易實現。以下是完整的課程:

@Global 
public class JsonObjectBinder implements TypeBinder<JsonObject> { 

    @Override 
    public Object bind(String name, Annotation[] annotations, String value, Class actualClass, Type genericType) throws Exception { 
     return new JsonParser().parse(value); 
    } 

} 

就是這樣!使用@Global註釋,Play將在加載時找到它,並將其註冊到其他活頁夾中。我在我的控制器中使用以下簽名:

public static void handleJsonBody(JsonObject body) { 
    ... 
} 

正文將由Play自動分析。您可以對JsonArray執行相同的操作以支持您的特定情況。

4

一些啓發你有2種選擇:

  • 簡單:將參數作爲一個字符串,並在控制器它解析爲JSON
  • 複雜的:創建使用​​
+0

KISS通常工作對我很好。所以我最終傳遞了一個簡單的String,如下所示:filterParams:「milk = chevre&pate = molle」並使用String.split()方法在控制器中解析它。 – Alain 2011-05-26 13:45:37

+0

Thx爲您提供幫助Pere – Alain 2011-05-26 13:51:13