通过 GWT 按钮单击更改连接器中 Vaadin 自定义小部件的状态并在服务器端获取它

Change the state in a Vaadin custom widget in the connector through a GWT button click and get it server side

我正在尝试通过用户生成的点击设置 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 按钮后,文本框包含 "text changed from connector"

的文本

处于状态:

public String text = "original state text";

获取状态的UI实现:

vaadinButton.addClickListener(new ClickListener() {

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

        }
    });

在单击 GWT 按钮后单击 vaadin 按钮时,通知仍然显示 "original state text"。

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

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

编辑,这里是一个关于如何使用 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
  }
});