2011-05-18 41 views
5

Tôi có phương thức thư viện Common.addTheUsualStuffToTheModel(model) cần thêm các thuộc tính khác nhau vào kiểu trong mọi phương pháp điều khiển trong ứng dụng của tôi.Cách tốt nhất để thực thi mã điều khiển Xuân lặp đi lặp lại là gì?

@RequestMapping(value = "/everypath", method = RequestMethod.GET) 
public final String everyHandler(ModelMap model) 
{ 
    model = Common.addTheUsualStuffToTheModel(model); 
    return "everyPage"; 
} 

Cho đến nay tôi đã được bổ sung thêm dòng này tương tự cho tất cả các phương pháp xử lý:

model = Common.addTheUsualStuffToTheModel(model); 

Nhưng tôi sợ này là không phù hợp với nguyên tắc "viết một lần, sử dụng ở khắp mọi nơi".

Làm cách nào để tránh lặp lại mã này trong mọi trình xử lý?

Trả lời

7

Bạn có thể sử dụng một interceptor<mvc:interceptors> để làm điều đó

Trong đánh chặn của bạn, bạn có thể thêm bất cứ điều gì như yêu cầu thuộc tính (mà thực chất là nơi mà các thuộc tính mô hình đi). Mã đánh chặn được thực hiện trước hoặc sau mỗi phương thức (phù hợp với ánh xạ đánh chặn).

Nếu bạn không nhất thiết cần mô hình được điền trước phương pháp điều khiển, theo phương pháp postHandle bạn nhận được đối tượng ModelAndView.

+0

Tốt, có vẻ như với phương thức postHandleRender, bạn thậm chí có thể giữ lại mô hình và thêm nội dung trước khi chế độ xem được hiển thị, vì vậy bạn sẽ không phải thêm nó làm thuộc tính yêu cầu. – digitaljoel

+0

xin lỗi, tôi đã đưa ra liên kết sai - nó phải là 'servlet', không phải' portlet'. Servlet chỉ có 3 phương thức, trong đó mô hình chỉ có sẵn trong phương thức postHandle. – Bozho

+0

@digitaljoel yup, đã thêm vào đó. – Bozho

0

Điều gì về việc chỉ định phương thức của nhà cung cấp dữ liệu tham chiếu có chú thích @ModelAttribute. Nếu bạn có một lớp cơ sở cho tất cả các bộ điều khiển của bạn, và lớp cơ sở đó có các phương thức chú giải @ModelAttribute thì tôi tin rằng dữ liệu sẽ có sẵn trong mô hình cho tất cả các khung nhìn được xử lý bởi các bộ điều khiển đó. Hãy xem 15.3.2.8 in the Spring docs.

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