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, и не допустите его редактирования или замены, этот подход приемлем. Но для подобных случаев желательно использовать область запроса, а не область сеанса.

Другие вопросы по тегам