2016-12-02 1 views
0

In search() -Methode ich Wert auf ss Variable setzen, aber bekommen null wenn beim Zugriff auf diese innerhalb run() oder eine andere Methode versuchen.Zugriff auf Instanzvariable in verschiedenen Verfahren im Frühjahr mvc

Kürzlich kam ich aus Federbeinen zu springen. Diese Senero ist in Struts möglich, aber ich weiß nicht, warum es Frühling nicht einnimmt.

Hinweis Ich kann hier static Schlüsselwort nicht verwenden, da es eine Multi-User-Anwendung ist.

@Controller 
public class AddEmployee implements Runnable { 
// instance variable having getter() and setter() method. 
    String ss; 

    @RequestMapping("/search") 
    public String search(Model model, @RequestParam String text) throws InterruptedException { 
     setSs(text); // setting value in ss 
     AddEmployee r = new AddEmployee(); 
     Thread t = new Thread(r); 
     t.start(); 
     return "listEmployee"; 
    } 

    public void run() { 
     System.out.println("$$$$$$$$$$$$$$$--->"+getSs());// getting null here 
    } 

    public String getSs() { 
     return ss; 
    } 

    public void setSs(String ss) { 
     this.ss = ss; 
    } 
} 

Vielen Dank im Voraus.

+0

Sind Sie sicher, dass die Variable 'text' nicht null ist? –

+0

@BOUALIALI Ja bin ich sicher –

Antwort

1

Sie Einstellung ss auf this, aber Ihr runnable ist ein new AddEmployee() Sie haben also zwei Instanzen des Controllers: eine von Spring erstellt, die ss Feldsatz ist, und eine andere, von Ihnen erstellt, das nicht der Fall ist habe sein ss gesetzt.

Ihre Runnable-Instanz sollte keine Instanz des Controllers sein. Verwenden Sie eine andere, verschiedene Klasse, und übergeben Sie den Text als Argument an den Konstruktor dieser Klasse:

public String search(Model model, @RequestParam String text) throws InterruptedException { 
    MyRunnable r = new MyRunnable(text); 
    Thread t = new Thread(r); 
    t.start(); 
    return "listEmployee"; 
} 

Denken Sie auch daran, dass ein Controller ein Singleton ist: Frühling erstellt eine einzelne Instanz jeder Controller. Das Speichern von request-scoped Daten in einem Feld eines Controllers ist genauso falsch wie das Speichern in einer statischen Variable.