我刚刚开始使用Vaadin,我有一个简单的Vaadin项目,定义了2个servlet及其相关的Vaadin UI类。我的问题涉及如何构建一个“推”式系统来在UI实例之间传递信息。
第一个servlet负责从用户收集数据(通过一个DataUI
),然后将其存储在数据库中。
第二个servlet负责用图表等报告收集的数据......(通过说ReportUI
)。对于不同的客户,可能会有很多这样的情况,查看与他们相关的不同数据集。
我想要一个架构,其中集中的ActorSystem
(坐在服务器上)创建并在ActorRef
个DataUI
实例创建时传递DataUI
个实例。当ActorRef
收集一些数据时,它会通过其ReportUI
将其作为消息发送,然后关闭。同样,每个ActorRef
都会传入一个{{1}}来监听与其报告相关的新数据,并相应地更新用户界面。
我的问题是我不能很好地理解Vaadin基础设施,看看如何在构建时将引用(如actor)传递给UI组件。 UI对象似乎使用类似于反射的东西进行实例化,并且只能通过请求对象或通过访问在web.xml文件中设置的字符串参数来传递信息。你如何使用Vaadin UI对象进行依赖注入?
我知道通过使用全局可访问的单例对象可以获得这种行为 - 但我想要一个架构,我可以单独测试每个组件(例如通过传入模拟actor)而不需要它们很难 - 连接到全局单例对象或数据库。
是否有达到标准的方法?任何关于良好建筑的帮助或建议都将非常感谢!提前谢谢。
我目前正在使用
另外我使用scala 2.10.3和Scaladin包装器库(scaladin_2.10-3.0.0.jar) - 但任何基本的Java示例仍然会非常感激 - 我更感兴趣的是看到更高级别的架构。
再次感谢!
答案 0 :(得分:0)
每个UI在为您构建之后,都会调用protected void init(VaadinRequest request)
方法。在这里,您可以获得一个合适的Actor,例如基于请求参数(即调用UI的URL),或者您可以在web.xml中配置的工厂类。
由于这仍然最终会让UI负责创建引用,因此您可以通过Vaadin / CDI扩展进行真正的依赖注入。这将允许您真正@Inject您的依赖项到UI。但这目前处于alpha状态,不确定这是否可以接受。我已经使用它了,对于基本的@Inject东西,它看起来效果很好。