[英]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.