2010-10-07 12 views
6

Sto cercando di iniziare con SmartGwt. Sto utilizzando XJSONDatasource per effettuare una chiamata tra domini a una pagina di esempio su SmartClient con dati JSON. Quando eseguo il codice, tuttavia, viene visualizzato un popup che dice "Ricerca di record che corrispondono ai tuoi criteri ..." Questo non scompare mai e i dati non vengono caricati. Sto usando la versione gratuita di SmartGwt (la mia azienda ha detto che questo è quello che useremo). Sperando mi manchi solo qualcosa di ovvio.SmartGwt - Carica dati griglia da JSON

DataSource dataSource = new XJSONDataSource(); 
    dataSource.setDataTransport(RPCTransport.SCRIPTINCLUDE); 
    dataSource.setDataFormat(DSDataFormat.JSON); 

    dataSource.setDataURL("http://www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js"); 
    DataSourceTextField nameField = new DataSourceTextField("name", "name"); 

    nameField.setValueXPath("name"); 

    dataSource.setFields(nameField); 

    ListGrid grid = new ListGrid(); 
    grid.setDataSource(dataSource); 
    grid.setWidth100(); 
    grid.setHeight(100); 
    grid.setAutoFetchData(true); 
    grid.draw(); 
+0

Si dovrebbe contrassegnare questa domanda con X-JSON pure – anataliocs

risposta

4

vedo dalla documentazione qui: http://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/data/XJSONDataSource.html

nota, come indicato al precedente tutorial , il server è responsabile per scrivendo non solo i dati, ma anche una funzione JavaScript chiama che comunica al client che è arrivata la risposta . Il client passa il nome di la funzione da chiamare come parametro "callback" URL.

Ma non c'è tale richiamata nel codice alla pagina che si collega al www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js

3

Quando il DataSource smartGWT fa un chiamare a questo URL:

http://www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js 

(Se voi fonte di dati sta facendo una chiamata a un App Java andare a fondo di questa risposta)

la richiesta il tuo origine dati farà includerà un parametro GET chiamata callback che assomiglia a questo:

callback=isc.Comm._scriptIncludeReply_0 

Lo script, contactsData.js, dovrà acquisire questo parametro GET.

contactsData.js dovranno includere una libreria per recuperare i parametri della URL:

javascript recuperare i parametri di funzione:

function getParameter (queryString, parameterName) { 
    // Add "=" to the parameter name (i.e. parameterName=value) 
    var parameterName = parameterName + "="; 
    if (queryString.length > 0) { 
     // Find the beginning of the string 
     begin = queryString.indexOf (parameterName); 
     // If the parameter name is not found, skip it, otherwise return the value 
     if (begin != -1) { 
     // Add the length (integer) to the beginning 
     begin += parameterName.length; 
     // Multiple parameters are separated by the "&" sign 
     end = queryString.indexOf ("&" , begin); 
     if (end == -1) { 
     end = queryString.length 
     } 

jQuery recuperare i parametri di funzione

http://ajaxcssblog.com/jquery/url-read-request-variables/ 

Dopo aver ottenuto il valore del parametro di callback scriverai il nome della funzione con il JSON come parametro nel corpo della risposta in questo modo:

isc.Comm._scriptIncludeReply_0({"item": [ {"id": "1","name": "Monkey"}, 
{"id": "2","name": "Tree"}, 
{"id": "3","name": "Banana"} ] }) 

Così il codice javascript sarà simile a questa:

Response.Write(getParameter(URLrequestFromDatasourceString,"callback") + " (" + JSON + ")"); 

JAVA

Se la vostra origine dati smartGWT effettua una chiamata a un Java app URL:

http://www.smartclient.com/getJson.htm

Il controller Java farà la stessa cosa ma è mu ch facile

String callbackString = request.getParameter("callback"); 

response.setContentType("text/X-JSON"); 
response.getWriter().write(callbackString + " (" + JSONstring + ") "); 
response.setStatus(HttpServletResponse.SC_OK); 

Also, here is a link to a blog post on the issue