Theo hoàn cảnh chính xác nào thì @SessionAttributes bị xóa? Tôi đã phát hiện một số hành vi khó hiểu khi cố gắng sử dụng hai mô hình trong một trang.Khi nào @SessionAttributes trong SpringMVC bị xóa? (Với mẫu mã)
Khi tôi làm một GET theo sau là một POST sử dụng bộ điều khiển này ...
@Controller
@RequestMapping("/myPage*")
@SessionAttributes(value = {"object1", "object2"})
public class MyController {
@RequestMapping(method = RequestMethod.GET)
public String get(Model model) {
model.addAttribute("object1", new Object1());
model.addAttribute("object2", new Object2());
return "myPage";
}
@RequestMapping(method = RequestMethod.POST)
public String post(@ModelAttribute(value = "object1") Object1 object1) {
//do something with object1
return "myPage";
}
}
... object2 bị xóa khỏi mẫu. Nó không còn tồn tại dưới dạng @SessionAttribute và không thể truy cập được trên trang xem của tôi nữa.
Tuy nhiên, nếu chữ ký của phương pháp thứ hai được sửa đổi để này ...
public String post(@ModelAttribute(value = "object1") Object1 object1,
@ModelAttribute(value = "object2") Object2 object2) {
... sau đó object2 không được xóa khỏi mô hình và có sẵn trên trang điểm của tôi.
Các javadoc cho @SessionAttributes nói:
... thuộc tính sẽ được gỡ bỏ một lần xử lý chỉ hoàn thành phiên đàm thoại của nó.
Nhưng tôi không thấy cách tôi đã chỉ ra hoàn thành phiên đàm thoại trong ví dụ đầu tiên nhưng không phải trong ví dụ thứ hai.
Có ai có thể giải thích hành vi này hoặc là lỗi không?
Vấn đề này đã được giải quyết trong mùa xuân 3.0RC1. Xem http://jira.springsource.org/browse/SPR-6084 Cảm ơn Juergen! –