Spring MVC + атрибуты сеанса и несколько вкладок
У меня есть некоторый интерфейс, где администратор может обновлять продукты. Во время моей разработки / тестирования я только когда-либо открывал одно окно, и все работало как надо.
Затем клиент редактировал, и он открывал несколько вкладок для разных продуктов, и при сохранении это вызывало проблему с дублированием поля.
Я предполагаю, что это сочетание @SessionAttributes
а также @ModelAttribute
, Последний продукт, открытый в сеансе, поэтому, если вы попытаетесь отредактировать первую вкладку, у вас действительно будет неправильный продукт.
Мой подход ниже, используя SessionAttribute
, а также ModelAttribute
неправильно?
Мой контроллер:
@Controller
@SessionAttributes({ "product" })
public class ProductController {
@RequestMapping(value = "/product/update/{productId}", method = RequestMethod.GET)
public String update(@PathVariable Long productId, Model model) {
Product product;
if (productId == null) {
product = new Product();
} else {
product = Product.find(productId);
}
model.addAttribute("product", product);
return "product/update";
}
@RequestMapping(value = "/product/update", method = RequestMethod.POST)
public String update(@ModelAttribute Product product, BindingResult result,
Model model) {
if (result.hasErrors()) {
return "product/update";
}
product = product.merge();
return "redirect:/product/update/" + product.getId();
}
}
2 ответа
В итоге я использовал собственный SessionAttributeStore, основанный на статье Марти Джонса
http://marty-java-dev.blogspot.com/2010/09/spring-3-session-level-model-attributes.html
В тех случаях, когда вы просто покажете объект, сохраненный в Session, и не допустите его редактирования или замены, этот подход приемлем. Но для подобных случаев желательно использовать область запроса, а не область сеанса.