Нулевые данные, передающие переменную из контроллера A в контроллер B - PullRequest
0 голосов
/ 18 октября 2019

Здравствуйте. Я пытаюсь передать данные переменных из базы данных с одного контроллера на другой, но у меня есть одна проблема: когда я передаю данные на контроллер A в контроллер B, появляется значение Null, дурак между сценами:

LoginController->AdminController->UserController

в LoginController для доступа к AdminController и передачи значения. Я делаю это:

    public String getRoladmin() {
    return roladmin;
}


    public void setRoladmin(String roladmin) {
    this.roladmin = roladmin;
}


   public String roladmin="";

. Я записываю переменную roladmin в эту часть моего кода следующим образом:

 while(rs.next()) {

                 comparauser=rs.getString("NOMBREUSUARIO");
                 comparapass=rs.getString("PASS");
                 miadmin=rs.getString("NOMBRE_ADMIN");
                 roladmin=rs.getString("ROL_ADMIN");


             }

для доступа к этапу I, если пользователь и пароль верны, как показано ниже:

 ----rest of code---   if(comparauser.equals(fusuario.getText().toString())&&comparapass.equals(fcontrasena.getText().toString().trim())) {

                     try {
                            Stage administrador=new Stage();
                            FXMLLoader carga = new FXMLLoader(getClass().getResource("Admin.fxml"));
                            Parent StackPane = (Parent)carga.load();
                            Scene scene = new Scene(StackPane);

                            AdminScreenController loadl = carga.<AdminScreenController>getController();
                            /*loadl.UserScreen.setText("Bienvenido"+"  "+fusuario.getText().toString());*/
                            loadl.UserScreen.setText("Bienvenido"+"  "+miadmin);
                            /* String r=loadl.UserScreen.getText().toString();*/





      -----in this part I call the LoginController and pass the variable Roladmin------



----begin of call--
                                String h=LoginController.this.roladmin;
                                LoginController.this.setRoladmin(h);
                                String r=LoginController.this.getRoladmin();
                                loadl.setCapdata(r);



    -----end of call-----

                                if(!r.equals("ADMINISTRADOR")) {

                                        loadl.btnimg5.setDisable(true);
                                        loadl.btnimg5.setStyle("-fx-opacity:0.65;");

                                    }
                                else {
                                    loadl.btnimg5.setDisable(false);
                                }

                                scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                                administrador.setScene(scene);
                                administrador.setTitle("AdminScreen");
                                Stage login=(Stage)fusuario.getScene().getWindow();
                                login.hide();
                                administrador.show();
                         }catch(Exception e) {
                             Logger.getLogger(Application.class.getName()).log(Level.SEVERE, null, e);
                         }
                     }
    ---rest of code---  

теперь я передаю эту переменную в AdminController следующим образом

in AdminController i have this:

public String capdata;
    public String h;

    public String getCapdata() {
        return capdata;
    }

    public String setCapdata(String data) {
        return this.capdata = data;
    }


this is the code i have to load UserController Stage:


    public void UserView() throws IOException {
        Stage userstage = new Stage();
        FXMLLoader cargauser =new FXMLLoader(getClass().getResource("UsuarioScreen.fxml"));
        Parent StackPane = (Parent)cargauser.load();
        UserController cargatodouser = cargauser.<UserController>getController();
        String pasadato=UserScreen.getText().toString();
        cargatodouser.iduser.setText(pasadato);

  ---begin of call to pass the variable---          

h=AdminScreenController.this.getCapdata();

---end of call---   



        /*String r=cargatodouser.iduser.getText().toString();*/
        Scene scene = new Scene(StackPane);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        userstage.setScene(scene);
        userstage.setTitle("QuoraApp");
        Stage AdminScreen=(Stage)btnimg1.getScene().getWindow();
        AdminScreen.hide();
        userstage.show();
}

теперь, когда я передаю переменную в класс UserController, у меня есть нулевое значение, я делаю это:

In UserController class i have this to go back AdminController:




public String capturau;



public String getCapturau() {
    return capturau;
}

public String setCapturau(String capturau) {
    return this.capturau = capturau;
}

        public void inicio() throws IOException {

                            Stage administrador=new Stage();
                            FXMLLoader carga = new FXMLLoader(getClass().getResource("Admin.fxml"));
                            Parent StackPane =(Parent) carga.load();

                            AdminScreenController loadl = carga.<AdminScreenController>getController();
                            String pasadato=iduser.getText().toString();
                            loadl.UserScreen.setText(pasadato);

                            /*Captura.setText(loadl.getCapdata());
                            String captura=Captura.getText().toString();
                            System.out.println(captura);*/


                           UserController.this.setCapturau(loadl.getCapdata());
                           String gg=UserController.this.getCapturau();
                           System.out.println(gg);

        }

что я делаю неправильно? небольшая помощь здесь, пожалуйста.

1 Ответ

1 голос
/ 18 октября 2019

Вам необходимо изучить концепцию статических переменных
Вот статическая переменная, которую я объявляю на одном контроллере и использую и на другом контроллере
БОЛЬШОЕ предостережение об использовании статических переменных или глобальных переменных
Чтокогда вы вводите статическую переменную, она сохраняет это значение до тех пор, пока вы не очистите его или не измените его

static Integer strID;

Здесь используется статическая переменная strID в другом классе контроллера
Обратите внимание, что это необходимобыть импортированным в новый контроллер

    import static diary.ChildTableViewController.strID;

private void ReadDetailView() throws SQLException{

    stmnt = conn.createStatement();
    ///String sql = "SELECT * FROM Child WHERE CID = "+strID;
    ///ResultSet rs = stmnt.executeQuery(sql);
    ResultSet rs = stmnt.executeQuery("SELECT * FROM Child WHERE CID = "+strID);

Добро пожаловать в SO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...