2010-01-01 46 views
5

Tôi đã tạo một bộ điều khiển thực hiện một số logic nghiệp vụ và tạo một mô hình. Nếu tôi vượt qua mô hình này trực tiếp để xem bằng cách trả về ModelAndView với tên và mô hình xem - mọi thứ hoạt động tốt. Nhưng bây giờ tôi muốn hiển thị kết quả tại một trang khác. Vì vậy, tôi sử dụng tiền tố "chuyển hướng:" để chuyển hướng đến một bộ điều khiển khác, nhưng mô hình bị mất.Spring MVC - mô hình truyền giữa các bộ điều khiển

Tôi thiếu gì?

Kính trọng, Oleksandr

Trả lời

0

Kể từ khi tiền tố redirect: chạy controller khác, bạn sẽ mất bất cứ điều gì bạn có trong ModelAndView trong bộ điều khiển trước. Có lẽ bộ điều khiển logic nghiệp vụ không phải là một bộ điều khiển chút nào - có thể bạn chỉ cần làm cho nó là một lớp thông thường, và có bộ điều khiển kết quả gọi nó. Sau đó, bộ điều khiển kết quả có thể lưu dữ liệu vào mô hình.

+1

Có, tôi có thể tách logic nghiệp vụ của mình ở một lớp khác. Nhưng để làm cho logic này xảy ra, tôi cần các tham số đầu vào. Im lấy chúng từ người dùng trong bộ điều khiển đầu tiên của tôi, và tôi cần một cách để truyền chúng cho một bộ điều khiển (kết quả) khác, mà sau đó sẽ gọi lớp logic nghiệp vụ. Bạn thấy đấy, khó khăn của tôi là truyền một số dữ liệu (trong trường hợp này là tham số đầu vào) giữa các bộ điều khiển (bộ điều khiển dữ liệu đầu vào và bộ điều khiển kết quả). – Oleksandr

4

Tùy chọn 1: Bạn có thể đặt mô hình trong phiên làm việc và đưa nó trở lại bộ điều khiển và vô hiệu hóa nó trong phiên.

Tùy chọn 2: Bạn nói, bạn đang có hai bộ điều khiển, đầu tiên sẽ truy xuất dữ liệu người dùng và thực hiện một số logic nghiệp vụ và chuyển hướng đến người khác. Đề xuất của tôi là di chuyển logic nghiệp vụ được đặt trong cả hai bộ điều khiển đến một lớp và chỉ có một bộ điều khiển sẽ trả về mô hình và xem cho người dùng.

+1

Nhưng làm thế nào tôi có thể lưu mô hình trong phiên sử dụng Spring-MVC với chú thích. Bạn có thể cho tôi một ví dụ? – Oleksandr

+4

ModelAndView mv = new ModelAndView(); mv.addObject ("key1", "value1"); mv.addObject ("key2", "value2"); mv.addObject ("key3", "value3"); request.getSession(). SetAttribute ("model", mv.getModelMap()); – novice

+0

Cảm ơn bạn rất nhiều vì câu trả lời! Chúng tôi gần như ở đó. Điều duy nhất tôi không hiểu được là làm thế nào để lưu trữ parametres trong HttpSession với chú thích. Ví dụ @SessionAttributes lưu trữ dữ liệu giữa các yêu cầu bên trong bộ điều khiển.Có chú thích nào lưu trữ dữ liệu là phiên vĩnh viễn hay không. Hoặc làm thế nào chúng ta có thể truy cập HttpSession với @RequestParam? Quặng có một số cách khác? – Oleksandr

0

tôi sẽ không sử dụng @SessionAttributes vì ​​nó có thể thay đổi trong các bản phát hành tương lai của mùa xuân. Tôi sẽ gắn bó với cách cũ thời đó Oleksandr cho thấy bạn trên

bằng cách nào đó một bài cũ nhưng có lẽ ai đó sẽ tìm thấy nó hữu ích

11

bạn có thể sử dụng phía trước: tiền tố mà cuối cùng thực hiện một RequestDispatcher.forward() insted of the redirect: tiền tố.

+0

Giải pháp này làm việc cho tôi. Cảm ơn @Niraj – will824

2

Trong khi chuyển hướng: yêu cầu được gửi bằng phương thức GET với thông số được nối vào url. Bạn có thể đúng một phương thức mới trong bộ điều khiển để nhận các tham số yêu cầu với chú thích @RequestParameter. Trong khi chuyển hướng yêu cầu, hãy thêm tất cả các tham số vào chuỗi

e.g ModelAndView mv = new ModelAndView(); 
mv.setViewName(redirect:/your/url); 
mv.addObject("param1", string_param); 
. 
. 
. 

Bằng cách này bạn có thể chuyển hướng thành công.

Các vấn đề liên quan