簡體   English   中英

GWT-異步方法調用失敗

[英]GWT - failure on async method call

當我執行異步方法調用時,調用onFailure(...)方法的原因是什么? 控制台輸出始終顯示“ ERROR !!!!”。

MyEntryPoint.java:

package com.example.smartgwtproject.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
//...

public class MyEntryPoint implements EntryPoint {
    public void onModuleLoad() {
        GreetingServiceAsync service = (GreetingServiceAsync) GWT.create(GreetingService.class);
        //...

        service.getFileList(new AsyncCallback<List<String>>(){

            @Override
            public void onFailure(Throwable caught) {
                System.out.println("ERROR!!!!");
            }

            @Override
            public void onSuccess(List<String> result) {
                System.out.println("OK!");
            }
        });
        //...
    }
}

.gwt.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN"
  "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
<module rename-to='dlaconfigcenter'>

  <inherits name='com.google.gwt.user.User'/>
  <inherits name="com.smartgwt.SmartGwt"/>

  <entry-point class='com.example.smartgwtproject.client.MyEntryPoint'/>

  <source path='client' />
  <source path='shared' >
    <include name="GreetingServiceImpl.java"/>
  </source>

</module>

GreetingService:

package com.example.smartgwtproject.client;

//...

@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
    List<String> getFileList();
}

GreetingServiceAsync:

//...

public interface GreetingServiceAsync {

    void getFileList(AsyncCallback<List<String>> callback);
}

<include name="GreetingServiceImpl.java"/>不應位於gwt.xml中。 Impl類是服務器端代碼,不應作為GWT源包含在內。 如果您使用任何非仿真類,例如像Apache Commons這樣的第三方庫,則會出現編譯錯誤。

您可能需要對web.xml進行一些更改,以指向GreetingsServiceImpl類,這可能是您在gwt.xml中試圖實現的目標。 我建議您仔細閱讀本教程以仔細檢查您的配置。 http://www.vogella.com/tutorials/GWT/article.html#server

假設您的配置正常。 GreetingServiceImpl類中的getFileList()方法可能引發異常。 通常,這就是觸發onFailure方法被調用的原因。 自從您的GreetingServiceImpl以來,我不確定這是怎么回事。

更新資料

404錯誤表示GWT無法找到您的Impl類。 有兩種可能性。

  1. 您的Web服務器未運行。
  2. 您的web.xml配置不正確。

如果您在托管模式下運行,則情況並非如此。 如果不確定,可以在這里找到有關托管模式的更多信息: http : //www.gwtproject.org/doc/latest/DevGuideCompilingAndDebugging.html

對於#2,請參考我上面鏈接的教程。 如果您的Servlet(Impl類)未正確映射,則將繼續獲得404。基本上,您需要在com.example.smartgwtproject.sever包中使用Impl類,並在網絡中有相應的記錄。 xml。 它看起來應該像這樣:

<servlet> 
    <servlet-name>GreetingService</servlet-name>
    <servlet-class>com.example.smartgwtproject.sever.GreetingServiceImpl</servlet-class>
</servlet> 

<servlet-mapping> 
    <servlet-name>GreetingService</servlet-name> 
    <url-pattern>/GreetingService</url-pattern> 
</servlet-mapping>

但是,我不能保證您的設置正確。 同樣,請參考教程以獲取所有詳細信息。 教程鏈接

暫無
暫無

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

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