使用Spring DI将数据从一个控制器传递到另一个控制器

时间:2016-12-11 11:48:21

标签: spring javafx dependency-injection

我有一个使用Spring DI框架的javafx应用程序。

我使用这个类SpringFXMLLoader<S,T>来获取James Denver的this github存储库中的父节点和相关控制器。

我遇到的问题是将数据从一个控制器传递到另一个控制器,例如从一个控制器中的表中选择一个用户,并将所选用户传递给另一个控制器并显示用户特定信息。

这是我尝试过的,因为我传递的对象在UserDetailController

中为空,所以没有效果
SpringFXMLLoader<Parent, UserDetailController> loader =
        SpringFXMLLoader.create()
            .applicationContext(applicationContext)
            .location(getClass().getResource("/fxml/userDetail.fxml"))
            .build();
Parent userDetailNode = loader.load();
            UserDetailController userDetailController = loader.getController();
            User user = tblUsers.getSelectionModel().getSelectedItem();

            userDetailController.setUser(user);
rootController.getViewContentPane().setCenter(userDetailNode);

在这种情况下,如何将数据从一个控制器传递到另一个控制器,即Spring DI注入bean。

使用Spring DI时如何在javafx控制器周围传递数据?

更新

任何人都需要额外的信息,我随时准备提供

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。我的方法的问题首先打败了使用依赖注入的逻辑,因为它引入了控制器之间的依赖关系。

解决方案

使用Spring发布和收听ApplicationEvents

  1. 我创建了一个带有User对象的事件。
  2. 注册为UsersController
  3. Publisher使用所选User
  4. 发布此活动
  5. UserDetailController注册为Listener收听并从活动中获取所选User