簡體   English   中英

將DataTable對象從JavaScript傳遞給Java

[英]Passing a DataTable object from JavaScript to Java

我在客戶端使用Google Visualization API,並創建了一個DataTable對象。 然后我想將它傳遞給我的服務器並通過Spreadsheet API上傳到電子表格。 可能最好的方法是使用JSON,因此我使用方法toJSON()將其轉換並通過POST將其發送到我的服務器。 我嘗試使用這兩個類:

現在我注意到,這兩個類不兼容,至少不是JSON。 JavaScript類例如轉換為:

{"cols":[
         {"id":"Col1","label":"","type":"string"}
         {"id":"Col2","label":"","type":"date"}
        ],
 "rows":[
         {"c":[{"v":"a"},{"v":"Date(2010,10,6)"}]},
         {"c":[{"v":"b"},{"v":"Date(2010,10,7)"}]}
        ]
}

但Java端DataTable有不同的參數名稱,我使用的Gson有不同的類型值:

cols -> columns
c -> cells
v -> value

type:"string" -> type:"TEXT"
type:"number" -> type:"NUMBER"

而且我擔心更多的不兼容性。

那么..我怎樣才能將JavaScript DataTable轉換為Java對象DataTable?

我反過來遇到了同樣的問題。 Java數據源庫中的DataTable對象似乎與Google Visualization API中的Javascript DataTable對象不平行。

返回Java數據源庫DataTable對象需要使用JsonRenderer,而不是默認序列化。 它似乎只是從服務器傳遞到客戶端。 我不確定它是否可以完成另一個方向。

@WebService
@Path("/tables")
public class DataManager extends GenericManager<db, Long> {

    @Path("/hello/")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public DataTable getDataTable() {
        DataTable data = new DataTable();
        ... populate object ...
        return data;
    } 

但是,默認序列化返回的Java DataTable對象與Google Visualization API javascript DataTable不同。 您無法將其傳遞給GVis圖表。

相反,從Java中,您使用JsonRenderer類( 請參閱此Google Groups電子郵件 )將其轉換為類似Json的字符串,該字符串缺少針對適度壓縮的屬性的引號。

    @Path("/hello/")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getDataTable() {
        DataTable data = new DataTable();
        CharSequence charSequence = JsonRenderer.renderDataTable(dataTable, true, true);
        return charSequence.toString();
    } 

該字符串可以通過用括號括起來在Javascript中解析,而不是在示例中的對象文字符號中顯示( 請參閱此Google論壇論壇 ):

jQuery.ajax({
    context: this,
    type: 'Get',
    url: url,
    success: function(data) {
         var args = eval('('+data+')');  // add parens around the returned string                          
         var dataTable = new google.visualization.DataTable(args);  
         ...
 });

我沒有看到與Java數據源庫DataTable對象相反的方法。 所以不是一個答案,但你並不孤單

好吧,我在后端使用python,在前端使用GWT,並將DataTable從后端傳遞到前端,沒有任何問題。 我在后端使用google-visualization-python api來創建DataTable。
使用以下代碼進行解析:

DataTable dataTable = DataTable.create(JSONParser.parseLenient(data).isObject().getJavaScriptObject());

我還將解析后的DataTable轉換回JSON以將json字符串存儲在localStorage中,並且解析存儲的json字符串也可以正常工作。

GWT DataTable只是一個簡單的包裝器,它最終只通過JSNI調用底層Javascript DataTable的功能。所以我沒有看到它們為什么不兼容的原因。

確保使用最新的gwt-visualization API (1.1.2)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM