在search()方法中,我将值设置为ss
变量,但在尝试访问run()内部或任何其他方法时获取null
。
最近我从struts来到了春天。这种senerio在struts中是可能的,但我不知道它为什么不在春天。
注意我无法在此使用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 :(得分:1)
您在ss
上设置this
,但您的runnable是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";
}
另外,请记住控制器是单例:Spring创建每个控制器的单个实例。将请求范围的数据存储在控制器的字段中与将其存储在静态变量中一样错误。