当前位置: 首页 > 知识库问答 >
问题:

Vaadin表不实时更新

凌昕
2023-03-14

基本上,这个程序是一个9x9矩阵,其中每个单元格都需要用某些数字更新。我有一个矩阵表。将其初始化为0。程序正在工作,但在一切完成后仅更新一个表。(找到解决方案)。

由于数据在幕后更改,表单元格不会更新。整个表在程序执行结束时更新。但我想在给每个单元格赋值时看到每个数字实时变化。非常感谢任何代码帮助。

我也在没有容器的情况下尝试了这个。但这也没有更新表。我做的研究告诉我,setImite(true)需要在表上设置。但我已经有了。

此外,论坛上说

Item itt = container.getItem(cell.getRowIndex() + 1);
Property<Integer> rrr = itt.getItemProperty(cell.getColumnIndex() + 1);
rrr.setValue(num);

上面的行应该足以反映 UI 中更改的数字。但它没有发生。我也试过了

table.refreshRowCache();
table.setCacheRate(0.1);

但是没有奏效。

我也在论坛上读到过使用价值天使。但是,我找不到一个好的例子来告诉我如何做到这一点,如果这是唯一的方法

private Container container = new IndexedContainer();

public class MyVaadinUI extends UI {

    @Override
    protected void init(VaadinRequest request) {

    ...
        for (int i = 1; i <= 9; i++) {
            container.addContainerProperty(i, Integer.class, 0);
        }

    for (int i = 1; i <= 9; i++) {
        container.addItem(i);
    }
...
            table.setContainerDataSource(container);
            table.setImmediate(true);

...
...

    / * this is filling the table correctly with all 0's */
    populate.addClickListener(new ClickListener() {

        @Override
        public void buttonClick(ClickEvent event) {
...
            for (int i = 1; i <= 9; i++) {
                Item item = container.getItem(i);
                int rowIndex = i - 1;
                for (int j = 1; j <= 9; j++) {
                    Property<Integer> nameProperty = item.getItemProperty(j);
                    int columnIndex = j - 1;
                    nameProperty.setValue(uploadReceiver.getMatrix()[rowIndex][columnIndex]);
                }

            }

        }
    });


    solveButton.addClickListener(new ClickListener() {

        private boolean solveSudoko() {
    ...
            for (int num = 1; num <= 9; num++) {

                // check if no conflicts then
                if (!AreThereConflicts(num, cell.getRowIndex(), cell.getColumnIndex())) {
                    uploadReceiver.getMatrix()[cell.getRowIndex()][cell.getColumnIndex()] = num;

                    // Item row = container.getItem(cell.getRowIndex() + 1);
                    // Property<Integer> col =
                    // row.getItemProperty(cell.getColumnIndex() + 1);
                    // col.setValue(num);
                    Property prop = container.getItem(cell.getRowIndex() + 1).getItemProperty(cell.getColumnIndex() + 1);
                    prop.setValue(num);
                    table.setContainerDataSource(container);    

                    /* Table is not getting updated here ???? */

                ...
                    uploadReceiver.getMatrix()[cell.getRowIndex()][cell.getColumnIndex()] = 0; // unassign
                    // Item itt = container.getItem(cell.getRowIndex() + 1);
                    // Property<Integer> rrr =
                    // itt.getItemProperty(cell.getColumnIndex() + 1);
                    // rrr.setValue(num);
                    Property prop2 = container.getItem(cell.getRowIndex() + 1).getItemProperty(cell.getColumnIndex() + 1);
                    prop2.setValue(num);
                    table.setContainerDataSource(container);

                    /* Table is not getting updated here ???? */
                }

            }

            return false;

        }

共有1个答案

纪晨
2023-03-14

乍一看,似乎所有“更改单元格”逻辑都发生在一次单击的接收器中(即在solveSoduku中)。

事件监听器中的所有代码都将在单个请求/响应周期内发生,这意味着在方法完成之前,UI不会更新:这是Vaadin架构的基本部分。

如果您想“查看”中间更新,您必须创建一个后台线程来执行解决,然后使用“推送”解决方案来更新表。Vaadin 7.1.0(最近发布)内置了推送功能,否则请在Vaadin论坛上查看此线程。

 类似资料:
  • 我正在尝试使用vaadin,并希望在我的Vaading7项目中使用甘特聊天插件。https://vaadin.com/directory#addon/vaadin-gantt-diagram:vaadin 由于这与Vaadin7不兼容,我正在尝试修复插件中的一些代码,使其与Vaadin7兼容。 “WidgetSet不包含Ru.Bazon.vaadin.GanttDiagram.canvas.Gan

  • 我正在开发一个vaadin web应用程序,我在web.xml中添加了以下代码片段。 现在我注意到,也在30分钟后,我的用户能够使用应用程序,我不想这样。我在vaadin的书上读到了一些关于这个问题的东西,但我并不了解一些东西。 在web.xml中: 会话超时应长于心跳间隔,否则会话在心跳保持活动之前就已关闭。由于会话过期使UI处于假定会话仍然存在的状态,这将在浏览器中导致不同步错误通知。 但是,

  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 在我更改了pom.xml文件的vaadin版本号和vaadin插件版本号后,构建失败 然后,我尝试清理并重建项目,但构建失败表明: [Help 1]的链接没有给出任何错误的线索。如果我回到以前版本的vaadin 7.3.10,项目运行得很好

  • 在这种情况下,我希望检索数据,但在返回数据之前,我希望在不保存/持久化的情况下对其进行更改。 这是我的Rest控制器: 以下是服务实现: 最初我在服务上有注释。通过删除它而不在方法中使用它,我首先想到的是会话将使用存储库打开和关闭,如这里的答案所示。 这不起作用,我在评论中看到“会话将持续整个HTTP请求处理过程。”所以,在我添加的服务中 然后在我添加的方法中 在我做任何改变之前。然而,我所做的任

  • 问题内容: Vaadin 7中的和组件有什么区别? 我应该使用哪个,什么时候使用? 问题答案: Grid是一个功能更强大的新组件,它应该是Table的后继组件(请参阅Table已死,Grid长寿)。因此,应该没有任何必要偏爱表格而不是网格。 这是Vaadin从表格迁移到网格的一系列文章的第一篇:https : //vaadin.com/blog/-/blogs/mission-rip- table