如何在vaadin7表中实现滚动监听器

如何在vaadin7表中实现滚动监听器,vaadin,Vaadin,在Vaadin中,当您在表格(com.Vaadin.ui.Table)中向下或向上滚动时,不会触发任何事件来通知您用户正在滚动 为什么我们需要在表中滚动事件? 首先让我们看一下这个Vaadin()的例子,打开链接后,只需单击“登录”,您将自动重定向到“交易”页面,该页面显示金融交易的表格,这些交易将在您滚动时显示一批又一批,实际发生的情况是,数据是在UI启动时加载的(所有事务) 现在,让我们假设我们有成千上万的交易。当UI启动时,将它们全部加载在一起是否合乎逻辑?在UI等待所有事务加载时,一点一

在Vaadin中,当您在表格(com.Vaadin.ui.Table)中向下或向上滚动时,不会触发任何事件来通知您用户正在滚动

为什么我们需要在表中滚动事件? 首先让我们看一下这个Vaadin()的例子,打开链接后,只需单击“登录”,您将自动重定向到“交易”页面,该页面显示金融交易的表格,这些交易将在您滚动时显示一批又一批,实际发生的情况是,数据是在UI启动时加载的(所有事务)

现在,让我们假设我们有成千上万的交易。当UI启动时,将它们全部加载在一起是否合乎逻辑?在UI等待所有事务加载时,一点一点地加载它们以防止减慢UI速度,这难道不是明智之举吗

此问题的最佳解决方案是获取第一个(比如100个事务),然后在向下滚动时获取更多事务,但此解决方案只有一个问题,即Vaadin不支持com.Vaadin.ui.Table中的滚动事件处理!!

Vaadin表的滚动事件 (GitHub)项目实际上依赖于Vaadin表,正如您在第53行的文件代码中看到的,我们要做的是扩展com.Vaadin.ui.Table并实现我们自己的行为,从现在开始支持滚动Vaadin表

首先,让我们创建一个新的简单接口ScrollingTableScrollListener此接口将负责实现scroll事件,其代码如下所示:

package com.vaadin.demo.dashboard.scrolling; public interface ScrollingTableScrollListener { public void doTableScroll(); } 实际上,这张表与瓦丁的表相同,但有以下区别:

  • 它覆盖了超类(Vaadin Table:com.Vaadin.ui.Table)的changeVariables()方法,实际上这里是启动滚动行为的核心业务。我们在这里所做的是调用了超类的
    changevalues()
    ,然后调用了
    fireSrollEvent()
    方法
  • 另一个区别是,它还有两个成员:
  • public void addScrollListener(ScrollingTableScrollListener listener)此方法将负责向表的滚动事件添加新的侦听器
  • private void fireSrollEvent()此方法将由
    changeVariables()
    方法调用,并将通过调用方法
    addScrollListener()对该表添加的每个注册侦听器调用方法
    doTableScroll()
  • 现在,为了利用我们添加的新内容,我们将更改前面提到的仪表板演示的原始代码(特别是文件)。在这个文件中,只有几行需要添加和修改

    首先,我们将通过添加此类将实现的新接口(即我们的新接口(ScrollingTableScrollListener))来修改,并通过在此类末尾添加以下行来实现其单个方法:

    @Override public void doTableScroll() { // TODO Auto-generated method stub Notification.show("You are scrolling!\nYou can add your own behavior here!"); } 下面是GitHub上新仪表板的详细信息

    我的

    Vaadin表格滚动事件的答案 (GitHub)项目实际上依赖于Vaadin表,正如您在第53行的文件代码中看到的,我们要做的是扩展com.Vaadin.ui.Table并实现我们自己的行为,从现在开始支持滚动Vaadin表

    首先,让我们创建一个新的简单接口ScrollingTableScrollListener此接口将负责实现scroll事件,其代码如下所示:

    package com.vaadin.demo.dashboard.scrolling; public interface ScrollingTableScrollListener { public void doTableScroll(); } 实际上,这张表与瓦丁的表相同,但有以下区别:

  • 它覆盖了超类(Vaadin Table:com.Vaadin.ui.Table)的changeVariables()方法,实际上这里是启动滚动行为的核心业务。我们在这里所做的是调用了超类的
    changevalues()
    ,然后调用了
    fireSrollEvent()
    方法
  • 另一个区别是,它还有两个成员:
  • public void addScrollListener(ScrollingTableScrollListener listener)此方法将负责向表的滚动事件添加新的侦听器
  • private void fireSrollEvent()此方法将由
    changeVariables()
    方法调用,并将通过调用方法
    addScrollListener()对该表添加的每个注册侦听器调用方法
    doTableScroll()
  • 现在,为了利用我们添加的新内容,我们将更改前面提到的仪表板演示的原始代码(特别是文件)。在这个文件中,只有几行需要添加和修改

    首先,我们将通过添加此类将实现的新接口(即我们的新接口(ScrollingTableScrollListener))来修改,并通过在此类末尾添加以下行来实现其单个方法:

    @Override public void doTableScroll() { // TODO Auto-generated method stub Notification.show("You are scrolling!\nYou can add your own behavior here!"); } 下面是GitHub上新仪表板的详细信息


    我的

    上的答案根据您的问题,您正在寻找延迟加载

    如果将表与支持延迟加载的容器连接,则项目将从其数据源延迟加载。这意味着当您滚动并从缓冲项中取出时,表会向容器“询问”更多项。然后容器从其数据源加载更多项


    例如,来自Vaadin的支持该功能。此容器使用JPA连接到数据源。更多信息。

    根据您的问题,您正在寻找延迟加载

    如果您将表与支持 t.addScrollListener(this); @Override public void doTableScroll() { // Put your own code here ... }
    public class ScrollingTable extends Table {
    
    // ...
    
    @Override
    public void changeVariables(Object source, Map<String, Object> variables) {
        super.changeVariables(source, variables);
        handleScrollEvent(variables);
    }
    
    private void handleScrollEvent(Map<String, Object> variables) {
        if (variables.containsKey("firstvisible")) {
            for (TableScrollListener listener : listeners) {
                listener.doTableScroll();
            }
        }
    }