0

gwt と rpc に問題があります。rpc のサービスを実装します。

@RemoteServiceRelativePath("search")
public interface SearchService extends RemoteService {
    List<Result> doSearch(String keyWords, Coordinate start, Coordinate end);
}

public interface SearchServiceAsync {
    void doSearch(String keyWords, Coordinate start, Coordinate end, AsyncCallback<List<Result>> callback);
}

public class SearchServiceImpl extends RemoteServiceServlet implements SearchService {
    private static final long serialVersionUID = 1L;
    private ISearch search = null; // interface to my database

    public List<Result> doSearch(String keyWords, Coordinate start, Coordinate end) {
        LonLat lowerLeft = new LonLat(start.getLongitude(), start.getLatitude());
        LonLat upperRight = new LonLat(end.getLongitude(), end.getLatitude());

        try {
            search = new SearchController(keyWords, lowerLeft, upperRight);
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        List<de.myPackage.model.Result> temp = null;

        try {
            temp = search.doSearch();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return map(temp);
    }

    private List<Result> map(List<de.myPackage.model.Result> results) {
       ....
    }
}

これらは、コールバックに必要なクラスです。この 2 つのクラス Result と de.myPackage.model.Result について不思議に思う必要はありません。結果クラスは共有フォルダーにあり、 de.myPackage.model.Result は同じクラスですが、別のモジュールからのものです (maven を使用)。クライアント側のコードでは自己コード化されたコンテナを使用できないため、複雑にする必要があります。このために、SearchServiceImpl に map() メソッドがあります。de.myPackage.model.Result を Result にマップします。

ここに私のビューからの欠落した呼び出しがあります:

AsyncCallback<List<Result>> callback = new AsyncCallback<List<Result>>() {
    public void onFailure(Throwable caught) {
        System.out.println("Fail!");    
    }

    public void onSuccess(List<Result> result) {
        addToTable(result);
    }
};
searchService.doSearch(callback);

問題は、私の SearchServiceImpl の doSearch-Method が呼び出されないことです。なぜなら、彼はそれを見つけることができず、理由がわからないからです:(コールバックをトリガーするボタンを押すたびに、次のように表示されます:

404 - POST /myProject/search (127.0.0.1) 1412 bytes
   Request headers
      Host: 127.0.0.1:8888
      User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
      Accept-Encoding: gzip, deflate
      Connection: keep-alive
      Referer: http://127.0.0.1:8888/index.html?gwt.codesvr=127.0.0.1:9997
      X-GWT-Permutation: HostedMode
      X-GWT-Module-Base: http://127.0.0.1:8888/myProject/
      Content-Type: text/x-gwt-rpc; charset=utf-8
      Content-Length: 334
      Pragma: no-cache
      Cache-Control: no-cache
   Response headers
      Content-Type: text/html; charset=iso-8859-1
      Content-Length: 1412

どういう意味ですか?私はそれを理解していません:(

4

1 に答える 1

0

にサーブレットのマッピングがありませんWEB-INF/web.xml:

<servlet>
  <servlet-name>SearchService</servlet-name>
  <servlet-class>de.myPackage.server.SearchServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>SearchService</servlet-name>
  <url-pattern>/search</url-pattern>
</servlet-mapping>

その権利を web.xml に入れるか、 gwt-maven-plugin で生成するか、または Servlet 3.0 コンテナー (つまり、DevMode でも AppEngine でもない) を使用している場合は、クラスに適切な注釈を適用できます。

于 2013-01-05T15:25:16.733 に答える