TL;DR:如何将来自两个数据库表的信息合并到一个 Vaadin Treetable(或者,当 Vaadin 7.5 发布时,一个分层网格)?
我有一个 Java Swing 桌面应用程序目前可以执行此操作,尽管使用每 30 秒从 SQL Server 更新一次的 Java Beans ArrayLists 可能非常低效。好吧,我现在正在尝试将此桌面应用程序移植到 Vaadin 网络应用程序。桌面应用程序具有登录功能,我最终会担心为网络应用程序做同样的事情,但现在,我只想尝试让这个网络应用程序的最基本部分工作:树表。或者,希望很快,一个分层的网格。
为了帮助说明我的目标,我将尝试发布一张我创建的图像,该图像应该显示两个表中的数据需要如何合并到树表中(使用我现有桌面应用程序的部分屏幕截图) :
我很清楚如何在 SQL 中使用 JOIN 命令,并且我已经简要阅读了 Referencing Another SQLContainer ,但我仍处于学习 Vaadin 的早期阶段,并且仍在努力思考 SQLContainer、FreeformQuery 以及我需要如何实现 FreeformStatementDelegate 为我的项目。更不用说我需要为每一行实现复选框,正如您在那张照片中看到的那样,以便在单击它们时更新数据库。对于具有多个 OrderDetail 项目的作业,其中只有部分 OrderDetail 项目已完成,复选框的半选中状态将是必要的。为了使它适用于我的 Java Swing 程序,我不得不依靠一位已经准备好大部分代码的专家级 Java 开发人员,天哪,它是不是 super 复杂!
如果有人能给我提供有关如何完成此任务的高级 View 以及一些示例,我将感激不尽。我完全理解我在这里的要求很高,只要你愿意,我愿意慢慢来,一步一步来。我真的很想完全理解这一点,所以我不会不假思索地复制粘贴代码。
最佳答案
我从未使用过SQLContainer
,所以这可能不是您想要的答案。我刚刚快速浏览了 SQLContainer
,我不确定它是否符合您的目的。对于 TreeTable
,您将需要一个 Container
来实现 Container.Hierarchical
接口(interface),否则该表将对其进行包装,您必须设置亲子关系手动。您可能可以扩展 SQLContainer
并在该类中实现 Container.Hierarchical
中的方法,但这可能会变得复杂。
在您的情况下,我认为我会实现自己的容器,可能会扩展 AbstractContainer
,以免费获取监听器代码,并实现 Hierarchical
。有很多方法要实现,我知道,所以这需要一些时间,但大多数方法很快就会实现,你可以从基本方法开始,添加更多接口(interface)(Ordered
, Sortable
, Indexed
, Filterable
, Collapsible
, ...)稍后。
如果处理得当,您最终会得到易于阅读的代码,这些代码可以在将来轻松扩展,并且您将不会依赖于 SQLContainer
的 future 版本。
另一个好处是您将学到很多关于 vaadin 中使用的数据结构(Container
、Item
、Property
)的知识。但正如我所说,我并不真正了解 SQLContainer
所以也许会有更好的答案告诉您使用 SQLContainer
对于复选框功能,您可以将名称/产品属性显示为 CheckBox
。使用 Icon 和 Caption,它看起来就像您想要的一样。参见 http://demo.vaadin.com/sampler/#ui/data-input/other/check-box并设置一个图标。半检查状态可以用 css 来完成。
希望这能帮助您找到适合您任务的解决方案。
关于sql-server - 将两个数据库表合并为一个 Vaadin Treetable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29524194/