OK, sau khi truy tìm mã nguồn Spring, tôi nghĩ rằng tôi có một số câu trả lời dứt khoát.
1) Thêm thông số truy vấn theo cách thủ công vào URL mà bạn chuyển lại trong chuỗi "chuyển hướng: ..." là IDEA RẤT NHIỀU. Spring lưu trữ các chế độ xem mà các url đó đề cập đến, vì vậy nếu bạn chỉ định nhiều tham số khác nhau, bạn sẽ tiết kiệm bộ nhớ một cách hiệu quả bằng cách làm cho bộ nhớ cache chứa nhiều giá trị mà nó không cần.
Lưu ý rằng PetClinic mã ví dụ trong việc phân phối mùa xuân không chính xác này, và dường như đã có một vấn đề Jira huy động để sửa chữa nó :-)
2) Các đối tượng mô hình vẫn còn nắm giữ bởi mùa xuân khi bộ điều khiển trả về và Spring WILL sẽ tự động thêm bất kỳ giá trị nào vào nó vào URL bạn chỉ định (như các tham số truy vấn) - CUNG CẤP rằng các giá trị mô hình là các đối tượng nguyên gốc hoặc String thuần túy. Bây giờ, vì đối tượng sao lưu biểu mẫu là một đối tượng được lưu trữ như một thuộc tính duy nhất, Spring không làm bất cứ điều gì với nó.
Vì vậy - từ một Bộ điều khiển được chú thích, cách tiếp cận tốt nhất có vẻ là thêm tham số ModelMap vào phương thức xử lý. ? Khi bạn đã sẵn sàng trở lại, làm một cái gì đó như thế này:
Assuming the form backing object "formObject" has been passed as a parameter to the controller handler method (via the ModelAttribute annotation) and has properties "param1" and "param2" that are Strings -
modelMap.clear();
modelMap.addAttribute("param1", formObject.getParam1());
modelMap.addAttribute("param2", formObject.getParam2());
return "redirect:/my/url";
Và mùa xuân sẽ phát hành một chuyển hướng tới/my/url param1 = value; param2 = giá trị
Có không xuất hiện để được một cơ chế dựng sẵn (trong Spring) để biến một bean thành một danh sách các cặp khóa/giá trị để thêm vào bản đồ, nhưng nếu bạn thực sự cần nó, thư viện Apache BeanUtils sẽ làm tốt. Tất nhiên, bạn không muốn làm điều này cho các đối tượng lớn nếu không bạn có thể vượt quá độ dài cho phép của một URL.
Tìm tất cả những gì ra dường như khó khăn hơn nhiều so với nó cần thiết để được :-)
Không có vẻ để làm việc ...Tôi đang sử dụng bộ điều khiển chú thích, vì vậy bộ điều khiển của tôi chỉ là một lớp java đơn giản, không kế thừa từ bất kỳ lớp Spring nào. Nếu tôi tạo một đối tượng RedirectView mới và trả về nó từ bộ điều khiển ... nó không nối thêm bất kỳ thứ gì vào URL. Tôi không thể thấy cách đối tượng RedirectView sẽ nhận được một tham chiếu đến đối tượng biểu mẫu - không có tùy chọn setter hoặc constructor nào để truyền vào biểu mẫu của tôi! – David
Khi RedirectView được xử lý renderMergedOutputModel được gọi. Phương thức này nhận được mô hình của bạn và hiển thị url chính xác. – uthark
Nếu tôi tạo một RedirectView mới, nó sẽ không có bất kỳ tham chiếu đến bất kỳ đối tượng mô hình nào. Và không có setter để cung cấp cho nó một đối tượng mô hình. Nếu tôi gọi phương thức "render()" trên RedirectView, chuyển một Map chứa đối tượng mô hình của tôi, thì nó chỉ ném ra một IllegalStateException khi chạy. Có vẻ như khuôn khổ đã quên bao gồm hỗ trợ để thực hiện việc này khi sử dụng chú thích ... – David