2014-01-15 94 views
0

我想從服務器對象傳遞給客戶端,與Vaadin:傳遞一個對象從服務器到客戶端與Vaadin

我的對象:

public class MyObject { 
    public String name; 
    public int value; 
} 

然後,我有延伸AbstractJavaScriptComponent一個組件,該組件有這樣:

public void doStuff(MyObject obj) { 
    callFunction("doStuff", obj); 
} 

JavaScript函數doStuff然後正確地叫,但我得到的參數不具有的特性namevalue,參數的類型是正確的(MyObject)。

MyObject是視窗元件(它是在* .client命名空間)的一部分,雖然我不知道這是否是連一絕..

什麼錯?

回答

0

嘛僅供參考,我會回答它自己:

即使callFunction說,它可以處理Objekts/JavaBeans的,在我看來,這其實不能。 但是這樣一來它的工作原理:

把這樣的事情在你的視窗元件:

public interface MyComponentClientRpc extends ClientRpc { 
    public void doStuff(MyObject obj); 
} 

然後,而不是callFunction使用getRpcProxy(MyComponentClientRpc.class).doStuff(obj);

並把這樣的事情在你的JS-連接器:

this.registerRpc({ 
    doStuff : function(obj) { 
     alert(obj); 
    }, 
}); 

我瞭解在這裏:https://vaadin.com/de/wiki/-/wiki/Main/Using%20complex%20Java%20types%20from%20JavaScript

0

callFunction利用下劃線JSON編組/解組機構。所以你應該讓你的傳輸對象實現「org.json.JSONString」接口。例如

public class MyObject implements JSONString, Serializable { 
    public String name; 
    public int value; 

    @Override 
    public String toJSONString() { 
     return String.format("{\"name\":\"%s\",\"value\":%d}", name, value); 
    } 
} 
相關問題