问题标签 [vaadin7]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6464 浏览

vaadin7 - Vaadin 7:文件上传

我有一个上传组件,我应该在其中导入一个 xml 文件以解析它。

我正在尝试使用 File.createTempFile 方法从物理上创建文件,但是发生了一些奇怪的事情。

例如,如果我获取名为“test.xml”的文件并使用 createTempFile 方法在磁盘上创建它,生成文件的名称将变为类似于“test.xml13234xml”。如何正确创建文件?

0 投票
1 回答
437 浏览

java - 奇怪的 Vaadin 组合框行为

我的 Vaadin 应用程序中有以下 UI。1. 链接到用户容器的 USER 组合框和 2. 带有链接到学生容器的 STUDENTS 列表的 UI 表。

我每隔 10 秒定期刷新学生容器。但是,在刷新学生容器时,如果我选择了组合框列表,则项目将显示为灰色,然后我必须重新选择组合。

como 列表在刷新之前是可以的,此后所有元素都是灰色的。

我不认为这是正常行为吗?关于如何解决这个问题的任何想法?

0 投票
1 回答
2560 浏览

vaadin - 以编辑模式在表格的组合框中显示来自 IndexedContainers 的不同值

简而言之: 在编辑模式下,我的表格的每个字段中的组合框在选择项目时给了我一个转换错误,但是相同的逻辑和容器在 TableFieldFactory (createField())之外工作得很好。我究竟做错了什么?

更长的解释: 我有一个包含多个属性(列)和项目(行)的容器。当我编辑连接到此容器的表时,我希望某些列字段上有组合框。我为此使用了 TableFieldFactory,它的工作原理就像一个魅力。

我希望每个字段中的组合框包含来自其各自属性的不同元素。我对此的解决方案是在我的 Container 类中实现一个方法,该方法遍历容器中的所有属性,并为每个属性创建一个新的 IndexedContainer,该属性具有唯一值。该方法返回一个带有 PropertyIds/Containers 的映射,因此我可以在 createField() 中从我想要为其设置组合框的每个属性中选择每个容器。

例子

所以,假设我有三个 propertyId,Foo,Bar 和 Baz,每个“包含”几个项目,其中一些项目是相同的,如下所示:

  • 克里斯
  • 克里斯
  • 梅格
  • 梅格
  • 梅格
  • 斯图维
  • 斯图维

...对于 Bar 和 Baz 也是如此,只有其他值...

getDistinctContainers() 方法返回一个Map,如下所示:

当我要在 createField() 中设置容器数据源时,容器看起来像这样(对于属性 Foo):

……我觉得还可以……

现在,该表按预期显示了每个字段中的组合框。但是当我单击组合框中的一个项目时,它会给我以下转换错误:

笔记:

我尝试在表格之外创建相同的场景,并且效果很好。因此,具有相同逻辑和相同容器的组合框似乎可以在 TableFieldFactory 和 createFields() 方法之外正常工作。我无法解释为什么他们不应该在 TableFieldFactory 中工作......

问题:

  • 我该怎么做才能让组合框设置正确的值?

这是我的容器类:

...这是createField的相关代码:

请帮助我了解我所缺少的!

提前致谢!

0 投票
1 回答
1006 浏览

vaadin - 无法丢弃在 TableFieldFactory 中的字段中所做的更改

我有一个简单的表,其中我使用 IndexedContainer 作为数据源来呈现一些数据。我希望我的用户能够编辑其中的一些数据,因此我使用 TableFieldFactory (DefaultFieldFactory) 来生成这些可编辑的列(属性)。

现在,如果用户处于编辑模式 (table.setEditable(true)) 并且一直在更改某些字段,他或她应该能够放弃这些更改 - 为此,我有一个“取消”按钮。这个“取消”按钮应该放弃自用户进入编辑模式然后 setEditable(false) 以来在表格生成的字段中所做的所有更改 - 现在一切都应该是调用 setEditable(true) 之前的方式。

这听起来并不难,直到我尝试实现它。

如果我正确理解 Table 与 Container 与 TableFieldFactory 的功能,则会发生以下情况:

  1. 属性被添加到容器
  2. Container设置为Table数据源
  3. 用户单击“编辑表”按钮 (table.setEditable(true))
  4. Table 调用 TableFieldFactory 的重写 createField() 方法
  5. createField() 方法创建可编辑字段
  6. 用户编辑字段,同时容器得到更新 <-- 不是 100% 确定这个
  7. 用户单击“取消”按钮<-这是我的问题

问题:当我按下“取消”按钮时,我应该怎么做discard()?我不能做 table.discard(),因为改变已经发生了。我不能做 container.discard() 因为,是的,Container 接口不继承该方法。我不能执行 field.discard(),因为我无法从 createField() 方法之外访问字段。

我尝试了 setBuffered、markAsDirty、refreshRowCache 和 setImmediate 的不同变体,但均未成功。

这是(希望是所有)相关代码:

表格、容器和“取消”按钮(大致):

表场工厂:

0 投票
1 回答
1533 浏览

vaadin - 为什么在编辑模式下延迟加载在我的表格中如此缓慢?

我有一个包含 15 列和大约 4000 行的表格。我需要使某些列可编辑,因此我为此使用了 TableFieldFactory。

问题是当我进入编辑模式时,加载速度真的很慢。当我向下滚动并且延迟加载加载另一个缓冲区时,可能需要 20 秒才能重新绘制表格。

即使只有一列可编辑,它的加载速度也慢得令人难以忍受。

在一次延迟加载中,大约加载了 500-1000 行,因此 createField() 可能被调用了 7500-15000 次,但这是 Vaadin 的已知限制还是我做错了什么?当有这么多列时,也许我不应该首先使用 TableFieldFactory?

有谁知道是否有更好的方法来实现上述表,而不会获得这些疯狂的缓冲区加载时间?

提前致谢!

0 投票
1 回答
382 浏览

vaadin - IE8 中的标题和列宽不一致

在 IE8 中,我的表的列和标题无法正常工作。这些列获得了它们内部最宽数据所需的空间,并且这些列似乎获得了它们的原始大小。当我单击或调整列标题的大小时,情况会更加严重。

另外,我的表中有很多行(超过 1000 行),但没有出现滚动条,所以我什至看不到所有数据。

IE8宽度问题这是它在 IE8 中的样子的图像。

作为记录,在 Chrome、Firefox 和 IE9 中一切正常(可能在 IE10 中也是如此,但还没有机会测试它)。

有谁知道如何解决这一问题?

0 投票
1 回答
192 浏览

java - 如何设计类依赖于实例创建顺序的 DI

这感觉像是一个非常标准的问题,可能以前也有人问过,但我发现很难找到,因为很难用语言来定义。因此,如果这是重复的,请继续重定向我!

我正在使用 Vaadin 构建这个 Web 应用程序,但这与手头的问题无关紧要,除非有更好的方法通过一些 Vaadin 魔法来解决这个问题。

我有三个班级:

  • 桌子
  • 过滤器生成器
  • 容器

我的“设计”是这样的:

  • Container在其构造函数中为自身添加了一些属性(列标题)
  • FilterGenerator @Inject Container (为了使用 Container 的 getDistinct() 方法从容器中获取不同的项目 - 为了在过滤器的 ComboBox 中很好地呈现它们)
  • 表@Inject FilterGenerator 为了table.setFilterGenerator(filterGenerator))
  • Table @Inject Container 并调用容器的addItems() 方法向容器中添加项目
  • 然后将容器添加为数据源

怎么了?

我现在应该有一个在列标题中有一个 ComboBox 的表格,呈现不同的值进行过滤。

我得到的是一个在列标题中有一个 ComboBox 的表,在 ComboBox 中没有显示任何内容,因为 ComboBox 中没有项目。

这并不奇怪,因为当FilterGenerator调用Containers的getDistinct()方法时,会得到一个空的<Column, items>返回map,因为在FilterGenerator中@Inject的时候,Table还没有调用Containers的addItems()方法,所以此时 Container 将是空的。

问题

如果我希望一个组件(FilterTable)从第二个组件(Container)中获取某些东西,我应该如何设计这个应用程序,而第三个组件(Table)是 @Inject 两个上述组件,并且第二个组件(Container)至关重要) 当第一个组件 (FilterGenerator) 从中获取一些东西时已经被初始化了吗?

我可以:

  • 在表中,只需创建一个newFilterGenerator。这会起作用,但它不是很好。例如,如果某个其他组件想要使用 FilterGenerator,会发生什么?

  • 返回 xml-configuration 以“手动”以正确的顺序创建实例。这可能起作用(如果我没记错的话),但是根据 xml 文件中元素的顺序创建实例对我来说听起来不是很好。

  • 通过在代码中使用 ApplicationContext.getBean() 来使用“程序注入”。这可能比上述替代方案更糟糕?

有人对如何解决这个三角剧有什么好的建议吗?

以下是相关代码:

桌子

容器

过滤器生成器

0 投票
1 回答
2312 浏览

debugging - 在客户端调试 vaadin 应用程序

我正在从 vaadin 6 更新到 vaadin 7,我正在尝试找到一种在客户端调试项目的方法。我试图启动调试程序,但没有任何效果。我正在使用Windows 8并且在尝试安装时gwt-plugin看到以下消息:

因此,我希望至少能够在调试窗口中发送消息,就像VConsolevaadin 6. 奇怪的是,在我的工作环境中,vaadin 7 类中已弃用的内容在 vaadin 7 项目中没有响应,即我在任何地方都看不到消息。有什么可能的原因吗? 虽然建议使用 Logger代替,但我仍然无法理解两件事:

1)logging.properties外观应该如何?

2) 我在哪里看到日志消息的输出?

任何其他建议将不胜感激。

0 投票
1 回答
1285 浏览

vaadin - 尝试使用新数据重新加载 IndexedContainer 时出现 NullPointerException

我试图用新的数据“重新加载”一个 IndexedContainer,但得到一个 NPE。

我有一种addItemsToContainer(List<Person> persons)用于填充容器的方法。

假设我的 Person 列表包含 100 个人员对象。当我第一次打电话addItemsToContainer(List<Person> persons)时,我的容器已经装满了,一切都很好。

但是,第二次调用该方法时,我NullPointerException在 setValue() 中得到了一个。

现在,似乎removeAllItems() 确实删除了所有项目,但所有ItemId都留在了容器中。这意味着我第二次调用该方法时,第一个自动生成的 ItemId 是101. 这是我获得NPE的原因吗?调试时,我可以看到我从person.getId().

我的 addItemsToContainer 方法

堆栈跟踪(是我在addItemsToContainer 方法中标记的语句)ExampleMainTableContainer.java:94

0 投票
1 回答
1969 浏览

vaadin - 响应单击 Vaadin 表行的特定列

我是 Vaadin 的新手。我有三种不同的看法。View1 有一个包含 column1、column2 的表。对于特定的表格行,当我单击 column1 时,我想导航到 view2,当我单击 column2 时,我希望能够导航到 view3。我可以使用 ValueChanged 事件整体响应行单击。但是如何处理对行的特定列的单击?我处理行点击的方式如下

请帮忙