Convention over configuration support

Một phần của tài liệu Báo Cáo Seminar- Spring MVC (Trang 34)

- Chú ý: Các lớp con của AbstractCachingViewResolver, cache view sẽ giải quyết

10. Convention over configuration support

- Đối với nhiều project, việc gắn kết để thiết lập các quy ước và những mặc định hợp lý chỉ là những gì mà chúng cần…theme về quy ước trên cấu hình này bây giờ đã được hỗ trợ rõ ràng trong Spring Web MVC. Điều này có nghĩa là nếu bạn thiết lập các quy ước đặt tên tương tự như vậy, về căn bản bạn có thể cut down 1 trong số những cấu hình mà đòi hỏi cài đặt bộ điều khiển ánh xạ, xem lại các view, ví dụ như ModelAndView,…

- Class ControllerClassNameHandlerMapping được bổ sung cho HandlerMapping, sử dụng quy ước để xác định ánh xạ giữa các request URL và các Controller để truy cập các request

- Đây là đoạn mã giả từ file cấu hình Spring Web MVC

- ControllerClassNameHandlerMapping tìm ra các xử lý khác nhau (hoặc Controller), beans được định nghĩa trong các ứng dụng ngữ cảnh và làm toát lên tên Controller được định nghĩa ánh xạ xử lý của nó. Theo cách đó, các ánh xạ ViewShoppingCartController đến /viewshoppingcart* request

o WelcomeController maps to the /welcome* request URL

o HomeController maps to the /home* request URL

o IndexController maps to the /index* request URL

o RegisterController maps to the /register* request URL

- Trong trường hợp các lớp xử lý MultiActionController, các ánh xạ được tạo ra hơi phức tạp hơn. Tên các Controller trong ví dụ sau được cho rằng nó là sự bổ sung cho MultiActionController:

o AdminController maps to the /admin/* request URL

o CatalogController maps to the /catalog/* request URL 10.2. The Model ModelMap (ModelAndView)

- Class ModelMap về cơ bản là 1 Map có thể add thêm các object để hiển thị trong 1 View tham gia vào theo 1 quy ước đặt tên chung. Xem thêm các bổ sung Cotroller; chú ý rằng các object được thêm vào ModelAndView không có bất kỳ tên kết hợp nào được chỉ định

- Class ModelAndView sử dụng 1 class ModelMap là sự bổ sung của 1 Map tùy chọn để có thể tự động generate 1 key cho 1 object được add vào nó. Các chiến lượt để xác định để add thêm 1 object đó là, trong trường hợp object vô hướng như là User, để dùng tên ngắn của 1 class của 1 class object. Các ví dụ sau đây là những cái tên được tạo ra cho các object vô hướng đặt trong 1 ModelMap

o Trường hợp x.y.User được add thì tên user sẽ được tạo ra.

o Trường hợp x.y.Registration được add thì tên registration sẽ được tạo ra.

o Trường hợp x.y.Foo được add thì tên foo được tạo ra.

o Trường hợp java.util.HashMap được add thì tên hashMap được tạo ra. Trong trường hợp này có thể bạn muốn rõ ràng hơn về tên bởi vì về trực giác thì hashMap nhỏ hơn.

o Add null thì kết quả trả ra sẽ là IllegalArgumentException được đưa ra. Nếu như object (hoặc các object) được add null thì chúng ta cũng cần làm rõ về tên.

- Để tạo ra 1 name sau khi add thêm 1 object Set, List hoặc array là tham khảo trong collection, lấy tên ngắn class của đối tượng đầu tiên trong collection và sử dụng nó gắn với tên List . Ví dụ:

o 1 mảng x.y.User[] với 1hoặc nhiều phần tử x.y.User được add sẽ có tên userList được tạo.

o 1 mảng x.y.Foo[] với 1 hoặc nhiều phần tử x.y.User được add sẽ có tên fooList được tạo ra.

- Một java.util.ArrayList với 1 hoặc nhiều phần tử x.y.User được add sẽ có tên userList được tạo.

- Một java.util.HashSet với 1 hoặc nhiều phần tử x.y.Foo được add sẽ có tên fooList được tạo.

- Một java.util.ArrayList rỗng sẽ không được add vào tất cả (trong effect, addObject(..) khi gọi về cơ bản sẽ là 1 no-op).

10.3. The View – RequestToViewNameTranslator

- Khi không có tên View logic thì Giao diện RequestToViewNameTranslator sẽ xác định 1 cách rõ ràng. DefaultRequestToViewNameTranslator chỉ là 1 lớp bổ sung.

- Các ánh xạ DefaultRequestToViewNameTranslator yêu cầu các URL đến tên các view logic, như trong ví dụ:

- Chú ý trong việc thực hiện bổ sung các phương thức handleRequest(..) không View hoặc tên view logic bao giờ cũng được đặt vào ModelAndView và được trả về. Các DefaultRequestToViewNameTranslator được thao tác với việc tạo ra 1 tên view logic từ URL của yêu cầu. Trong trường hợp phía trên các RegistrationController được dùng liên kết với các ControllerClassNameHandlerMapping, một request URL của http://localhost/registration.html trả về kết quả trong tên 1 view local của registration bắt đầu được tạo ra bằng DefaultRequestToViewNameTranslator. Tên View logic này sau đó được giải quyết bên trong view /WEB-INF/jsp/registration.jsp bằng bean InternalResourceViewResolver.

Một phần của tài liệu Báo Cáo Seminar- Spring MVC (Trang 34)

w