2016-12-02 10 views
0

search()メソッドでは、変数ssに値を設定していますが、run()やその他のメソッド内でアクセスしようとするとnullになります。春の別のメソッドでインスタンス変数にアクセスできません。

最近、ストラットから湧き出ました。このsenerioはストラットでは可能ですが、私はなぜそれが春に取っていないのかわかりません。

staticキーワードはマルチユーザーアプリケーションのため使用できません。

@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; 
    } 
} 

ありがとうございます。

+0

'text'変数がnullでないことを確認してください。 –

+0

@BOUALIALIはい私は確信しています –

答えて

1

あなたはthisssを設定しているが、あなたの実行可能ではnew AddEmployee()だから、あなたのコントローラーの2つのインスタンス持ちです:ssフィールドセットを持つ春が作成した1、せず、あなたが作成した別のものを、そのssが設定されています。

Runnableインスタンスはコントローラのインスタンスであってはなりません。別の、別のクラスを使用し、このクラスのコンストラクタへの引数としてテキストを渡す:

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

、コントローラはシングルトンであることを覚えて:春は、各コントローラの単一のインスタンスを作成します。コントローラのフィールドにリクエストスコープのデータを格納することは、静的な変数に格納することと同じです。

関連する問題