【问题标题】:Passing a object from server to client with Vaadin使用 Vaadin 将对象从服务器传递到客户端
【发布时间】:2014-01-15 12:43:27
【问题描述】:

我想用 Vaadin 将一个对象从服务器传递给客户端:

我的对象:

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

然后我有一个扩展AbstractJavaScriptComponent的组件,它有这个:

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

JavaScript 函数doStuff 然后被正确调用,但我得到的参数没有属性namevalue,参数的类型是正确的(MyObject)。

MyObject 是 WidgetSet 的一部分(它在 *.client 命名空间中),虽然我不知道这是否是必须的.​​.

怎么了?

【问题讨论】:

    标签: javascript vaadin vaadin7


    【解决方案1】:

    好吧,仅供参考,我自己来回答:

    尽管callFunction 说它可以处理Objekts/JavaBeans,但在我看来它实际上不能。 但这样就可以了:

    在你的 WidgetSet 中加入这样的东西:

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

    然后用getRpcProxy(MyComponentClientRpc.class).doStuff(obj);代替callFunction

    然后在你的 JS-Connector 中加入这样的东西:

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

    我在这里了解到:https://vaadin.com/de/wiki/-/wiki/Main/Using%20complex%20Java%20types%20from%20JavaScript

    【讨论】:

      【解决方案2】:

      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);
          }
      }
      

      【讨论】:

        【解决方案3】:

        我刚刚调试了代码。

        问题是callFunction() 接受Object[]。因此,JsonCodec 作为提示获得的类型是 Object.class,而不是 Object[] 中项目的类型。

        我现在发现了一个肮脏的解决方法:

        MyOptions options = new MyOptions();
        options.foo = "bar";
        options.count = 1;
        callFunction("myFunction",
                     JsonCodec.encode(options , null, MyOptions.class, null).getEncodedValue())
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-26
          • 2015-05-10
          • 2012-11-18
          • 1970-01-01
          • 2017-08-24
          相关资源
          最近更新 更多