У меня проблемы с разделением бизнес-логики с одного контроллера на разные контроллеры.Проблема: В начале моего приложения я спрашиваю у пользователя имя пользователя и пароль для входа в систему. После этого, и, если вход в систему успешен, я хочу показать пользователю основную сцену, которая включает в себя некоторые основные операции, которые может выполнять мое приложение.проблема заключается в том, чтобы выполнить любую основную операцию (например, найти группы, к которым принадлежит пользователь), мне нужно знать имя пользователя, которое пользователь использовал при входе в систему. Сначала я создал один контроллер и передал ему имя пользователя из логина.scene.Here - метод входа с контроллера входа:
private void login(){
boolean loginResult = false;
try {
//Returns True if the user can login with the given username and password
loginResult = userRemote.login(username_field.getText(), password_field.getText());
if (!loginResult) {
Alert alert = new Alert(Alert.AlertType.ERROR, "The username and/or password are incorrect");
alert.showAndWait();
} else {
loadMain();
}
} catch (RemoteException e) {
e.printStackTrace();
Alert alert = new Alert(Alert.AlertType.ERROR, "Unable to connect to the server.Please try again later");
alert.showAndWait();
} catch (IOException e) {
e.printStackTrace();
}
}
Если вход выполнен успешно, я загружаю главную сцену, передавая ему имя пользователя. Вот код:
FXMLLoader loader = new FXMLLoader(getClass().getResource("../view/fxml/main.fxml"));
Parent root = loader.load();
Controller controller = loader.getController();
controller.init(username_field.getText());
Stage stage = (Stage) ( (Node) (sign_in_btn) ).getScene().getWindow();
Scene scene = new Scene(root);
scene.getStylesheets().add("/gui/view/css/style.css");
stage.setScene(scene);
В контроллере я сохраняю имя пользователя в поле, вот метод init, который называется:
void init(String username) throws IOException {
this.username = username;
//some other code
}
После этого у меня есть имя пользователя в моем контроллере основной сцены, но проблема в том, что, потому чтоиз такого большого количества операций, которые должен выполнить контроллер, код в этом контроллере огромен (около 800 строк кода).
Я хочу спросить, есть лилюбой способ передать имя пользователя на другие контроллеры с одного контроллера?Мое приложение выполняет следующие операции: находит задачи пользователя, находит группы пользователя, создает задачи, создает группы, удаляет задачи, удаляет группы.Я использую группу переключателей, которые составляют навигационную панель:
Поэтому, когда пользователь нажимает любую из кнопок переключения, соответствующая операция выполняется с использованием имени пользователя, которое он дал, когдаон вошел в систему. Я хочу, чтобы каждая кнопка переключения загружала одно представление fxml, и каждое из представлений имело свой собственный контроллер, который выполняет соответствующее действие, используя имя пользователя. Но я не знаю, как сохранить имя пользователя и передать егоэти контроллеры.Правильно, я знаю, что я использую один контроллер, который не использует файлы fxml, он просто создает соответствующий графический интерфейс в зависимости от нажатой кнопки переключения и выполняет бизнес-логику.