6

SmartGwtを使い始めようとしています。XJSONDatasourceを使用して、JSONデータを含むSmartClientのサンプルページへのクロスドメイン呼び出しを行っています。ただし、コードを実行すると、「条件に一致するレコードを検索しています...」というポップアップが表示されます。これが消えることはなく、データが読み込まれません。私はSmartGwtの無料バージョンを使用しています(私の会社はこれが私たちが使用するものであると言っています)。明らかな何かが欠けていることを願っています。

    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();
4

2 に答える 2

4

ここのドキュメントからわかります:http ://www.smartclient.com/smartgwt/javadoc/com/smartgwt/client/data/XJSONDataSource.html

上記のチュートリアルで示したように、サーバーはデータだけでなく、応答が到着したことをクライアントに通知するJavaScript関数呼び出しも書き出す責任があることに注意してください。クライアントは、呼び出す関数の名前を「コールバック」URLパラメーターとして渡します。

ただし、www.smartclient.com / smartgwt / showcase / data / dataIntegration / json / contactsData.jsでリンクするページのコードには、そのようなコールバックはありません。

于 2010-10-21T07:57:13.883 に答える
3

smartGWTデータソースがこのURLを呼び出す場合:

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

(データソースがJavaアプリを呼び出している場合は、この回答の下部に移動してください)

データソースが行うリクエストには、次のようなコールバックと呼ばれるGETパラメータが含まれます。

callback=isc.Comm._scriptIncludeReply_0

スクリプトcontactsData.jsは、このGETパラメーターをキャプチャする必要があります。

contactData.jsには、URLからパラメーターを取得するためのライブラリを含める必要があります。

javascriptパラメータ取得機能:

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のパラメーター取得機能

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

コールバックパラメーターの値を取得したら、次のように、応答の本文にパラメーターとしてJSONを使用して関数名を記述します。

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

したがって、javascriptコードは次のようになります。

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

JAVA

smartGWTデータソースがJavaアプリのURLを呼び出す場合:

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

Javaコントローラーも同じことをしますが、はるかに簡単です

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

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

また、この問題に関するブログ投稿へのリンクもあります

于 2011-02-10T20:24:38.650 に答える