2011-03-24 40 views
0

自定義的方法簡單的問題我有RequestFactory一些請求接口關於RequestFactory

public interface FooRequest extends RequestContext { 
    Request<List<Foo>> findSmt(); 
} 

我想不通,我應該把findSmt()實施和我應該怎麼辦與實施佈線。

+0

+我不想在我的域實體中使用任何靜態方法。 – 2011-03-24 17:14:46

+0

爲什麼不創建一個繼承** FooRequest接口的類? – 2011-03-24 17:15:19

+0

@精英紳士 - 我應該如何在'FooRequest'和'FooRequestImpl'之間進行綁定? – 2011-03-24 17:17:39

回答

1

您可以使用@Service註釋來表示實現findSmt的類。你應該而不是繼承FooRequest。

@Service(FooRequestImpl.class) 
public interface FooRequest extends RequestContext { 
    Request<List<FooProxy>> findSmt(); 
} 

... 

public class FooRequestImpl 
{ 
    List<FooDAO> findSmt() //note that we dropped the Request and changed the Proxy to the DAO 
    { 
     return getFoos(); 
    } 
} 

不幸的是,在相同的情況下,我不得不將靜態方法放在我的域實體中。我認爲不可能在單獨的課程中創建InstanceRequest

+0

非常感謝。這似乎是可行的解決方案。 – 2011-03-24 17:44:45

0

對於findSmt(),GWT-RPC狀態下的documentation的綁定。

的RequestFactory服務存根必須 擴展的RequestContext和使用 @Service註解來命名服務器上的 相關服務實現 類。 服務存根中的方法不直接返回實體 ,而是返回 的子類 com.google.gwt.requestfactory.shared.Request。 這允許使用Request.fire()異步調用 接口上的方法 ,類似於將GWT-RPC中的每個 服務方法傳遞給 AsyncCallback對象。

例子:

@Service(Foo.class) 
public interface FooRequest extends RequestContext { 
    Request<List<Foo>> findSmt(); 
} 

public interface FooRequestFactory extends RequestFactory { 

    FooRequest fooRequest(); 
} 

最後,接線

final EventBus eventBus = new SimpleEventBus(); 
requestFactory = GWT.create(FooRequestFactory.class); 
requestFactory.initialize(eventBus); 
FooRequest request = requestFactory.fooRequest(); 
request.findSmt().fire(new Receiver() { 

    @Override 
    public void onSuccess(void arg0) { 
    //My implementation comes here.... 

    } 
}); 

fire()是你連線的findSmt()

+0

好的。謝謝。我用其他方法(通過@Riley)。但是這似乎也很有趣。不幸的是,我看不到你在哪裏放置'findSmt()'實現。 – 2011-03-24 17:43:50

+0

@Stas Kurilin,實現在'request.findSmt()。fire()'方法上完成。 – 2011-03-24 17:56:32

+1

'onSuccess'方法是findSmt的結果在客戶端發送的地方,而不是實現findSmt的地方。我認爲你需要在'@Service'註釋指定的類中的服務器上實現findSmt。 findSmt不能在客戶端上實現。 – 2011-03-24 17:58:16