Vaadin 7 在组件之间触发自定义事件

2023-12-08

我想创建自定义事件并在视图的某些部分触发它们,以便更新/删除/刷新视图的其他部分。

我尝试过扩展 Component.Event 和 Component.Listener 但它不起作用。我认为事件和侦听器必须仅限于同一组件实例。

Vaadin 7 可以做到这一点吗?

基本上我想解耦我的视图并提供组件之间的轻松通信。我还在 Vaadin 中使用 Spring。如果您除了观察者模式之外还有更好的想法,我也将不胜感激。

谢谢


您需要什么:
1. 触发事件的组件
2.自定义事件类
3. 监听器接口
4. 以及监听器的实现

1 中的组件需要有一个事件监听器列表,以及以下方法:addListener; removeListener; and dispatchEvent. The dispatchEvent-method 将遍历事件侦听器列表并执行某些方法(请参阅 4:侦听器实现)。该方法以事件对象作为参数(参见 2:自定义事件类)。

1 的基本代码:

protected List<MyListener> listeners; 

protected synchronized void dispatchEvent(MyEvent event) {
   if (listeners != null) {
      for (MyListener listener : listeners) {
         listener.myMethod(event);
      }
   }
}

public synchronized void addListener(MyListener listener) {
   if (listeners == null) {
      listeners = new ArrayList<MenuListener>();
   }
   listeners.add(listener);
}

public synchronized void removeListener(MyListener listener) {
   if (listeners == null) {
       listeners = new ArrayList<MyListener>();
       return;
   }
   listeners.remove(listener);
}

2 的基本代码:

public class MyEvent {
   protected String eventType;

   public MyEvent(String eventType) {
      this.eventType = eventType;
   }

   //getters and setters
}

3 的基本部分:

public interface MyListener {
    public void doSomething(MyEvent event);
}

4 的代码(监听器实现)

public class MyImplementation implements MyListener {

    @Override
    public void doSomething(myEvent event) {
        //do something concretes here
    }
}

代码流程如何工作:
经过一些交互后,调度程序类将向每个事件侦听器“宣布”发生了某些事情。

dispatchEvent(new MyEvent("ADD_USER"));

在想要接收事件的类中,您需要实例化调度程序类和侦听器实现类,并将侦听器添加到调度程序的列表中:

MyDispatcher disp = new MyDispatcher();
MyImplementation myImpl = new MyImplementation();
// Then add the event-listener to the dispatcher:
disp.addListener(myImpl);

当然,其中一些类可以是内部类,并且可以简化或扩展代码,但这是总体思路。这也只是普通的 Java,与 Vaadin 无关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vaadin 7 在组件之间触发自定义事件 的相关文章

  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • Java中RandomAccessFile的并发

    我正在创建一个RandomAccessFile对象通过多个线程写入文件 在 SSD 上 每个线程都尝试在文件中的特定位置写入直接字节缓冲区 并且我确保线程写入的位置不会与另一个线程重叠 file getChannel write buffe
  • H.323,如何制作一个没有媒体的简单环。该脚本遵循 Q.931 设置,但仍然无法正常工作

    谁能帮我解决这个问题吗 当我发送此请求时 我在wireshark中看到数据包将发送到1720 tcp端口中的SJPhone 但 SJPhone 仍然没有响铃 我想让它响起 无论媒体 我非常感谢您的支持 我一定缺少消息协议细节来实现这个 请给
  • RxJava + Retrofit 2 的正确使用方法

    我有这样的 JSON success true data id 29 name u0420 u0435 u0441 u0442 u043e u0440 u0430 u0446 u0456 u044f u0411 u0430 u0447 u0
  • 通过 html tidy 提供渲染 jsp 页面

    我有一个在 Glassfish 上运行的 Java 项目 它会呈现一些难看的 HTML 这是使用各种内部和外部 JSP 库的副作用 我想设置某种渲染后过滤器 通过 HTMLTidy 提供最终的 HTML 这样源代码就很好且整洁 有助于调试
  • Java“空白最终字段可能尚未初始化”方法中抛出异常

    我有一些代码 例如 final int var1 if isSomethingTrue var1 123 else throwErrorMethod int var2 var1 throwErrorMethod 的定义如下 private
  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • Java Spark DataFrameReader java.lang.NegativeArraySizeException

    学习 Spark for java 并尝试阅读 csv文件为DataFrame使用DataFrameReader 甚至不能得到一个超级简单的 csv文件工作 因为我不断收到异常java lang NegativeArraySizeExcep
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • Android 游戏偶尔出现延迟

    我正在用 Java 制作一个简单的 Android 游戏 我注意到每 20 40 秒就会出现一些烦人的延迟 首先 我认为它们是由垃圾收集器引起的 但当我检查 LogCat 时 我发现游戏滞后时没有垃圾收集 每当游戏开始滞后时 我都会标记日志
  • 强制 Java 最低版本以“java -version:”运行在 Windows 上不起作用

    我想强制应用程序运行的 JVM 最低版本为 1 6 或更高版本 即 1 6 我的理解是 您可以使用 version 命令行参数来执行此操作 我尝试了一下 在Linux下似乎可以正常工作 但在Windows下却不行 LINUX 我在 Linu
  • 无法自动装配 org.springframework.mail.javamail.JavaMailSender

    尝试运行我的应用程序时遇到以下问题 所有的东西都调试过了 还是一无所获 IDE 毫无问题地找到了 bean 所以我对这里发生的情况感到非常困惑 SEVERE Exception sending context initialized eve
  • selenium webdriver 中的多个程序执行不起作用

    Selenium WebDriver 中的多个程序执行不起作用 我编写了 1 个 testNG xml 文件和 2 个 java 类 我尝试从 xml 文件运行这两个 java 类 但这不起作用 XML代码
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • Elasticsearch - EdgeNgram + 突出显示 + term_vector = 不好的突出显示

    当我使用带有edgengram min 3 max 7 front term vector with positions offsets的分析器时 文档包含文本 CouchDB 当我搜索 couc 时 我的亮点是 cpu 而不是 couc
  • 春季MVC。方法参数字段的默认值

    我有一个带有方法测试的简单控制器 RequestMapping produces application json ResponseBody public HttpEntity
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader

随机推荐

  • Android 选项卡 - 开始一个新活动

    TabHost 中有 4 个选项卡 分别是 A B C 和 D 现在每个选项卡只是一个索引页 单击其中任何一个都会显示不同的活动 问题是 当用户从选项卡中显示的内容中选择某些内容时 我需要启动另一个活动 其他活动也应该显示在父选项卡本身中
  • 使用谷歌分析跟踪重定向页面

    我正在尝试使用谷歌分析跟踪重定向页面 我有一个名为redirect php 当我访问像这样的网址时redirect php c 12345678 一个 php 函数对 sql 查找表进行查询以解码代码12345678使用先前插入的 url
  • 有条件地生成表格行中断

    我有一个 table 有两个单元格 如果设备是计算机 我想水平显示 如果设备是移动设备 我想垂直显示 我借用了一个JS函数来从这个答案中检测移动设备https stackoverflow com a 11381730 3298930效果很好
  • 在 PyGame 中,如何在不使用 sleep 函数的情况下每 3 秒移动一个图像?

    最近我学习了一些基本的Python 所以我正在使用PyGame编写一个游戏来提高我的编程技能 在我的游戏中 我想每3秒移动一个怪物的图像 同时我可以用鼠标瞄准它并点击鼠标射击它 一开始我尝试使用时间 睡眠 3 但结果却暂停了整个程序 并且我
  • iCloud 仪表板:无法将 CloudKit 架构部署到生产环境 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个已发布的应用程序 具有现有的生产模式 我对开发模式进行了更改 现在我想部署到生产中 点击后Deploy Schema to Production 弹出对话框显示The
  • Python 中的 CSV 在 Windows 上添加额外的回车符

    import csv with open test csv w as outfile writer csv writer outfile delimiter quoting csv QUOTE MINIMAL writer writerow
  • Python Tkinter 滑块自定义

    I m new with tkinter and I want to create a slider like the one in this picture 但我不知道这是否可能 所以我的问题是 这可能吗 有人为我提供快速教程或其他东西吗
  • 使用 rlang 将权重传递给 glm()

    我想通过weights to glm 通过函数而无需使用eval substitute or do call 方法 但使用rlang 这描述了一个更复杂的底层函数 Toy data mydata dplyr tibble outcome c
  • 文件上传|无需刷新页面 |支柱2 |无闪光|

    问题描述 我想使用JSP创建一个文件上传屏幕 该屏幕将允许用户在屏幕上选择多个文件 但所有文件都只有一个 上传 按钮 单击上传按钮后 应在 Action 类中获取所有文件对象 但重要的是提交后页面不应该刷新 同一屏幕上还会显示其他信息 这些
  • 将数据从子组件传递到父组件(子组件通过路由加载)

    我有这个问题 Chat是一个父组件 它有Messages子组件 我有 url s chat chat id 所以我可以得到 id参数输入Messages组件与路由参数 但我需要那个 id in Chat成分 所以如果我加载 chat 46
  • jquery可以读取外部页面的dom元素吗?

    是否可以读取和解析 cnn com 例如 等第三方网站的 dom 元素 以便我可以获得 div a p 标签并读取位置和大小信息 jquery 可以解析并显示您的 javascript 代码运行的网页信息 但是如果我们向 load 命令提供
  • 如何反序列化 PHP 序列化数组/变量/类并在 C# 中返回合适的对象

    目标是反序列化PHP 序列化C 中的字符串并获取合适的对象 有什么方法可以在 C Net 中实现这一点吗 更具体 我们需要创建一个应用程序 通过 HTTP 与特定网站进行通信 该网站返回所需的信息 幸运 不幸的是 我们没有网站权限 因此数据
  • 启用文本过滤器时如何引用列表项的原始位置?

    当我使用编辑文本来过滤项目时 列表位置变得一团糟 并且项目不再调用正确的意图 任何帮助表示赞赏 lv setOnItemClickListener new OnItemClickListener public void onItemClic
  • 多个 Rails 应用程序 nginx 乘客配置

    I used this设置服务器指南 这是我的配置 nginx nginx conf user www data worker processes auto pid run nginx pid events worker connectio
  • 了解 Spring @Autowired 的用法

    我正在阅读 spring 3 0 x 参考文档来理解 Spring Autowired 注释 3 9 2 Autowired 和 Inject 我无法理解下面的例子 我们是否需要在 XML 中做一些事情才能使其正常工作 实施例1 publi
  • 监听JTextArea的粘贴事件

    我想在用户将文本粘贴到我的 JTextArea 中时调用一个函数 将文本粘贴到 JTextArea 时是否会生成任何事件 我可以使用哪个侦听器来触发此事件的函数 一种可能的解决方案 我希望有人有更好的解决方案 是替换按键绑定Action负责
  • Angular 2 Aot 错误:致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆内存不足

    在运行 Angular 2 AOT rollup 时我遇到了上述问题 lt Last few GCs gt 144518 ms Mark sweep 1317 0 1404 4 gt 1317 0 1404 4 MB 1522 9 0 0
  • 如何让一个进程等待多个资源?

    我目前正在使用 SimPy 来建模和模拟服务器进程 我希望该进程根据从何处接收此消息来执行不同的操作 SimPy 文档展示了如何等待多个事件 例如 yield event1 事件2 不过 我目前正在尝试等待多个商店提供资源 场景如下 服务器
  • 将测试结果添加到 VSTS 中的测试运行(测试用例)

    我需要将测试结果添加到 VSTS 中的测试用例中 我是 VSTS 新手 不确定我的代码出了什么问题 var ur new Uri https myaccount visualstudio com VssCredentials cr new
  • Vaadin 7 在组件之间触发自定义事件

    我想创建自定义事件并在视图的某些部分触发它们 以便更新 删除 刷新视图的其他部分 我尝试过扩展 Component Event 和 Component Listener 但它不起作用 我认为事件和侦听器必须仅限于同一组件实例 Vaadin