0

我正在尝试通过用户生成的单击在 Vaadin 自定义小部件中设置状态。在实例化服务器 rpc 后的组件连接器中,我得到 GWT 按钮并添加一个 onclick 方法。在我设置状态的方法中 (getState.text = "new text";) 但是当我尝试从服务器端获取它时,我得到了原始状态文本。不会触发 onStateChange 方法。

连接器中的代码:

        getWidget().getSaveButton().addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            alert("does it work without jquery?");
            getState().text = "text changed from connector";
            getWidget().getTextBox().setText(getState().text);
        }
    });

单击 GWT 按钮后,文本框包含文本“从连接器更改的文本”

在该州:

public String text = "original state text";

获取状态的 UI 实现:

vaadinButton.addClickListener(new ClickListener() {

        @Override
        public void buttonClick(ClickEvent event) {
            Notification.show(sig.getState().text);

        }
    });

单击 GWT 按钮后单击 vaadin 按钮时,通知仍显示“原始状态文本”。

我的问题:如何更改连接器中的状态,以便触发 onStateChange 方法并获得服务器端的文本更改?

4

1 回答 1

1

无法从客户端更新状态。只有服务器可以更新状态。您应该这样做,以便从客户端向服务器发送 RPC 请求,并在服务器上将值更新为状态。

编辑,这是一个关于如何使用 Vaadin 的 RPC 机制将值从客户端发送到服务器的示例:

创建一个接口扩展ServerRpc

public interface MyServerRpc extends com.vaadin.shared.communication.ServerRpc {
  void setValue(String value)
}

使用从上述接口创建的代理将值发送到服务器。此调用在连接器内部完成。

getRpcProxy(MyServerRpc.class).setValue("New value to server");

将接口实现注册到服务器端组件以接收 RPC 调用:

registerRpc(new MyServerRpc() {

  public void setValue(String value) {
    // set the value to state here by saying getState().myValue = value;
    // or do something else
  }
});
于 2015-02-28T02:17:23.133 回答