Spring 如何从一个控制器类和fxml文件创建控制器和视图的多个实例
在我的应用程序中,使用spring&javafx weaver bunch,我试图创建一个带有下拉字段org.controlsfx.control.table.TableRowExpanderColumn的表Spring 如何从一个控制器类和fxml文件创建控制器和视图的多个实例,spring,javafx,Spring,Javafx,在我的应用程序中,使用spring&javafx weaver bunch,我试图创建一个带有下拉字段org.controlsfx.control.table.TableRowExpanderColumn的表 tableUser.setItems(usersObservableList); tableColumn1.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getDepartment().g
tableUser.setItems(usersObservableList);
tableColumn1.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getDepartment().getName()));
tableColumn2.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getLogin()));
tableColumn3.setCellValueFactory(param -> new SimpleStringProperty(param.getValue().getProfile().toStringFIO()));
TableRowExpanderColumn<User> tableExpanderColumn = new TableRowExpanderColumn<>(param -> {
FxControllerAndView<UserEditExpanderController, GridPane> userEditExpander = getFxWeaver().load(UserEditExpanderController.class);
GridPane nodeGridPane = userEditExpander.getView().orElse(new GridPane());
UserEditExpanderController userEditExpanderController = userEditExpander.getController();
userEditExpander.getController().setData(param.getValue());
return nodeGridPane;
}
tableUser.getColumns().add(0, tableExpanderColumn);
tableUser.setItems(usersBServableList);
tableColumn1.setCellValueFactory(param->new SimpleStringProperty(param.getValue().getDepartment().getName());
tableColumn2.setCellValueFactory(param->new SimpleStringProperty(param.getValue().getLogin());
tableColumn3.setCellValueFactory(param->new SimpleStringProperty(param.getValue().getProfile().ToString());
TableRowExpanderColumn tableExpanderColumn=新的TableRowExpanderColumn(参数->{
FxControllerAndView userEditExpander=getFxWeaver().load(UserEditExpanderController.class);
GridPane nodeGridPane=userEditExpander.getView().orElse(新的GridPane());
UserEditExpanderController UserEditExpanderController=userEditExpander.getController();
userEditExpander.getController().setData(param.getValue());
返回nodeGridPane;
}
tableUser.getColumns().add(0,tableExpanderColumn);
初始化应该进行,但在编辑字段时,我知道使用了控制器的一个实例,即上次初始化的实例
如何为每个视图获取自己的控制器实例?如何在表中多次使用一个控制器和视图
据我所知,
getFxWeaver().load(UserEditExpanderController.class)
加载相同的控制器实例,但同时创建一个新视图。您的假设是正确的,每个load
操作都会实例化一个新视图,并将其连接到bean工厂提供的控制器(Spring应用程序上下文)
默认情况下,Spring组件的作用域是单例的,因此您总是获得相同的控制器实例
如果我正确理解您的问题,可以通过切换到原型范围轻松解决:
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class UserEditExpanderController {
//...
}