2011-02-24 46 views
2

我想用ValueProxy参数调用服务上的方法 - 如果我做personProxy.setName(“test”),然后request.callFn(personProxy).fire() ,name属性不会传递给服务器。创建GWT ValueProxy并发送到服务方法

我应该在设置名称或别的东西之前做一个request.edit(personProxy)吗?

这是我使用的实现:

//somewhere in MyActivity.java ... 
PersonProxy cp = requestFactory.myRequest().create(PersonProxy.class); 
cp.setName("John Doe"); 
requestFactory.myRequest().doSomething(cp,"extra_param_value").fire(new Receiver<List<PersonProxy>>() { 

    @Override 
    public void onSuccess(List<PersonProxy> response) { 
     //response from server... 
    } 

}); 

//------------------------ 
public interface MyRequestFactory extends RequestFactory { 
    MyRequest myRequest(); 
} 

//------------------------ 
@ServiceName(value="com.server.MyService", locator="com.server.MyServiceLocator") 
public interface MyRequest extends RequestContext { 
    public Request<Integer> doSomething(PersonProxy param, String extraParam); 
} 

//------------------------ 
public class MyServiceLocator implements ServiceLocator { 

    public Object getInstance(Class<?> clazz) { 
     return new MyService(); 
    } 

} 

//------------------------ 
public class MyService { 
    public Integer doSomething(Person param, String extraParam) { 
      System.out.println("person.name="+param.getName()); ---> prints NULL!!! why? 
      return 0; 
     } 
} 

//------------------------ 
@ProxyForName(value="com.server.Person") 
public interface PersonProxy extends ValueProxy { 
    String getName(); 
    void setName(String name); 
} 

//----------------------- 
public class Person { 
    public Person() { 
     super(); 
    } 

    protected String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

感谢。

回答

6

PersonProxy正在由一个RequestContext的实例创建并在另一个实例中使用。原因是AbstractRequestContext.retainArg()中有一个错误,它应该抛出一个异常来告诉你关于API的错误使用。可编辑代理不应该在不同的RequestContext实例之间可用。

TreeRequest ctx = factory.treeRequest(); 
PersonProxy person = ctx.create(PersonProxy.class); 
person.setName("John Doe"); 
ctx.doSomething(person, "more stuff"); 

如IRC上所讨论的,-Dgwt.rpc.dumpPayload=true JVM标志可以试图诊断,其中数据是要时被接通(或不是)。

+0

使用相同的RequestContext时,一切都很完美。谢谢! – 2011-02-24 16:06:34