使用edit()后GWT RequestFactory未正确触发

时间:2012-03-06 03:07:02

标签: google-app-engine gwt requestfactory

在使用“fire()”和GWT RequestFactory解冻并编辑代理后,我遇到了问题。

如果我有两个请求工厂对象及其相关的上下文:

private SyntheticRequest req1 = requestFactory.someRequest(); 
private Request<xProxy> sendRequest1 = req1.something(); 

private SyntheticRequest req2 = requestFactory.someRequest(); 
private Request<xProxy> sendRequest2 = req2.something();

在第一个请求中使用“fire()”工作正常:

sendRequest1.fire(new Receiver<xProxy>() {
    @Override
    public void onSuccess(xProxy response) {
        ...
        if (somethingIsTrue){
               xProxy x = req2.edit(response);  //<-- **I think this causes a problem later, although the proxy "x" works as expected here.**
               x.setSomething("something"); 
               update();                
         }
});

该部分运行正常,因为我进入“onSuccess”。但是当这个运行“update()”时,它看起来像这样:

private void update(){
  sendRequest2.fire(new Receiver<xProxy>(){
       ...onFailure...
       ...onSuccess...
  });
}

sendRequest2总是失败,错误

  

服务器错误索引:0大小:0

我在“something()”服务的代码中放了一个断点,它甚至都没有得到那个代码!必须有一些关于“req2.edit()”的东西会伤害req2和sendRequest2,但是什么?

感谢。

1 个答案:

答案 0 :(得分:3)

什么是'b'? xProxy x = req2.edit(b);行是第一次被提及?应该是xProxy x = req2.edit(response);

无论如何..那不是问题.. “服务器错误”表示RequestFactory在处理请求(服务器端)期间捕获到异常。某些东西(但可能不是某些东西())会引发IndexOutOfBounds异常。

如果你看一下RequestFactoryServlet.java(可以用你自己的btw替换它),你可以看到它设置了一个try catch块,它在处理请求时捕获所有异常。它将它们传递给'DefaultExceptionHandler',它将它们包装在ServerFailure中,然后作为onFailure()调用返回给你GWT代码。

查找异常抛出位置的简单方法是在IndexOutOfBoundsException上设置断点,确保捕获“捕获”异常以及未捕获的异常。