应用程序比这更复杂,所以我试图提取代码的相关部分。
Web应用程序的流程是我通过调用selectItemForOrder()
方法从列表中选择executionShop。
executionShop的id设置正确。
但是当我按下调用finishOrder()
方法的finishOrder按钮时,我得到NullPointerException
。我怎么能传输数据,因为我相信控制器类被破坏,当我按下finishOrder按钮时会创建一个新的控制器。
将id保存在数据库中不是一个选项(这是我试图解决的问题)。
对不起,如果这是一个微不足道的问题。我是Spring MVC的新手。
public class MyController {
private Integer executingShopId;
public View selectItemForOrder() {
setExecutingShopId(1);
return View;
}
public View finishOrder() {
System.out.println("Shop id: " + getExecutingShopId());
computeOrder(executingShopId);
return View;
}
}
答案 0 :(得分:1)
是的,你可以在jsp页面保持id的值 通过使用隐藏字段,如:
<form:hidden path="id"/>
答案 1 :(得分:1)
您是否更改了控制器的配置?对于默认情况,Controller是单例模式,因此您的代码不会导致问题。如果您确实更改了控制器是原型模式的配置,则会导致问题。绝对可以将值存储在隐藏中,但我建议您将值存储在会话中,因为它更有意义且更安全。
public View selectItemForOrder(HttpSession session) {
session.setAttribute(XXXX,YYY);
return View;
}
public View finishOrder(HttpSession session) {
Session.getAttribute(XXXX)
System.out.println("Shop id: " + getExecutingShopId());
computeOrder(executingShopId);
return View;
}