You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 14 下不使用Lit/Polymer实现HTML5 Web Component向服务端传数据

客户端原生JS修改(无需引入Lit/Polymer)

先修正原有代码的笔误,再补充服务端通信逻辑,完整代码如下:

class SimpleComponent extends HTMLElement {
  connectedCallback() {
    this.innerHTML = '<input type="text" id="test"/>';
    this._input = this.querySelector('#test');
    // 输入变更时触发自定义事件发送数据到服务端
    const self = this;
    this._input.onchange = function() {
      self.dispatchEvent(new CustomEvent('value-changed', {
        detail: this.value,
        bubbles: true,
        composed: true
      }));
    }
  }
  // 方法名和服务端调用的保持一致
  setValue(value) {
    this._input.value = value;
  }
}
customElements.define("simple-com",SimpleComponent);

服务端Java代码修改

在原有逻辑基础上补充客户端事件监听逻辑,即可拿到前端传递的输入值:

import com.vaadin.flow.component.*;

@Tag("simple-com")
public class SimpleComponent extends Component {
    private String value;

    public SimpleComponent() {
        // 监听前端抛出的value-changed事件
        addEventListener("value-changed", event -> {
            // 从事件参数中获取前端传递的输入值
            this.value = event.getEventData().getString("event.detail");
            // 此处可补充你自己的业务逻辑,比如触发值变更回调
            System.out.println("收到前端传值:" + this.value);
        }).addEventData("event.detail");
    }

    public void setValue(String value) {
        this.value = value;
        getElement().callJsFunction("setValue", value);
    }

    public String getValue() {
        return value;
    }
}

逻辑说明

原生Web Component通过CustomEvent抛出携带数据的自定义事件,Vaadin服务端组件直接监听对应事件即可拿到前端传递的参数,全程不需要依赖任何额外前端框架。

内容的提问来源于stack exchange,提问作者eladcm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:24:05