2

ValueProxyパラメータを使用してサービスのメソッドを呼び出したい-personProxy.setName( "test")を実行してからrequest.callFn(personProxy).fire()を実行すると、nameプロパティがサーバーに渡されません。

名前などを設定する前に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;
    }
}

ありがとう。

4

1 に答える 1

6

PersonProxy、の1つのインスタンスによって作成され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フラグをオンにすることができます。

于 2011-02-24T15:47:04.467 に答える