2016-12-02 37 views
0

在search()方法中,我将值设置为ss变量,但在尝试访问此内部run()或任何其他方法时获取null无法在spring中使用不同的方法访问实例变量mvc

最近我从支柱来到了春天。这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

你在this设置ss,但您可运行是new AddEmployee()所以,你有你的控制器的两个实例:一个由Spring创建的,具有ss字段设置,以及一个又一个,您创建的,这不设置了其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"; 
} 

另外请记住,控制器是一个单独的:春天创建每个控制器的一个实例。将请求范围数据存储在控制器的字段中与将其存储在静态变量中一样错误。