Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何从一个控制器类和fxml文件创建控制器和视图的多个实例_Spring_Javafx - Fatal编程技术网

Spring 如何从一个控制器类和fxml文件创建控制器和视图的多个实例

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

在我的应用程序中,使用spring&javafx weaver bunch,我试图创建一个带有下拉字段org.controlsfx.control.table.TableRowExpanderColumn的表

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 {
    //...
}