MVC gồm những thành phần nào trong khuôn khổ JSF MVC?


Câu trả lời:


150

Điều này phụ thuộc vào quan điểm (ý định chơi chữ).

Trong bức tranh kiến ​​trúc lớn, mã JSF của riêng bạn là V :

M - Miền doanh nghiệp / Lớp dịch vụ (ví dụ: EJB / JPA / DAO)
V - Mã JSF của bạn
C - FacesServlet

Trong hình của nhà phát triển, kiến ​​trúc V lần lượt được phân chia như dưới đây:

M - Thực thể
V - Khuôn mặt / Trang JSP
C - Đậu được quản lý

Trong hình ảnh khách hàng nhỏ hơn, nhà phát triển V lần lượt có thể phân chia như sau:

M - Cây thành phần JSF
V - Kết xuất HTML đầu ra
C - Máy khách (trình duyệt web)

Trong bức tranh JavaScript nhỏ hơn, máy khách V lần lượt có thể phân chia như dưới đây:

M - Cây DOM HTML
V - Bản trình bày trực quan
C - Chức năng lắng nghe sự kiện (tương tác người dùng cuối và Ajax)

Vì vậy, về cơ bản nó là M (M (M (M (MVC) C) C) C;)

Lưu ý rằng một số phần khởi động và thậm chí một số hướng dẫn — rất cơ bản — trộn / sao chép / làm phẳng các thuộc tính của thực thể trong bean được quản lý, điều này sẽ làm cho bộ điều khiển trở thành một mô hình hiệu quả. Không cần phải nói rằng đây là thiết kế kém (tức là không phải là một thiết kế MVC sạch sẽ).

Các đoạn mã trong các câu trả lời sau minh họa cách tiếp cận MVC phù hợp:

Trong cuốn sách Hướng dẫn dứt khoát về JSF trong Java EE 8 , ở chương 8 "Đậu sao lưu", trang 276, sơ đồ Venn dưới đây được sử dụng để minh họa vị trí của đậu hỗ trợ trong mô hình MVC trong ngữ cảnh liên quan đến nhà phát triển JSF . Tuyên bố từ chối trách nhiệm về bản quyền: sách do tôi viết và hình ảnh do tôi tạo ra.

nhập mô tả hình ảnh ở đây


+1 Hoàn toàn đồng ý với cả hai triết lý, nói chung là trường hợp của vòm lớn hơn. xem trong các dự án thời gian thực.
Jigar Joshi

2
không hiểu được cách chơi chữ, vẫn có một sự ủng hộ
Nick Russler

@JeffXem công việc của tôi, chúng tôi thấy nó giống như các bean được quản lý kiểm soát chế độ xem xhtml. Các bean được quản lý có thể nói chuyện với mã mô hình để lấy và lưu các thực thể tùy thuộc vào nhu cầu của chế độ xem.
djeikyb

5
@Jeff: đó là chỉ khi bạn trộn các thuộc tính mô hình trong đó. Như trong, sử dụng <h:inputText value="#{register.username}">thay vì <h:inputText value="#{register.user.name}">.
BalusC

Hoàn toàn đồng ý với câu trả lời này vì có hại cho câu trả lời của @ Jigar. IMO, đậu được quản lý không chỉ là một mô hình. Chúng là một dạng mở rộng của FacesServlet, nơi tất cả các tương tác xảy ra. Ngoài ra họ có thể nhà nước giữ, nhưng nhiều hơn một C chứ không phải là M.
Xtreme Biker

36

M odel sẽ là của bạnManagedBean

V iew sẽ là jsp, XHTML(bạn có thể cung cấp các góc nhìn khác nhau ở đây)

C ontroller sẽ làFacesServlet

Cập nhật, hy vọng hình ảnh này sẽ giúp nhiều hơn

nhập mô tả hình ảnh ở đây


4
+1, Làm cho cảm giác, mặc dù tôi có lẽ sẽ nói Model của bạn là Entities (nếu bạn có bất kỳ) và Controller là Đậu Managed (ngoài các FacesServlet)
Shervin Asgari

@Jigar tốt, nếu FacesServletlà một bộ điều khiển hơn tôi không thể mở rộng nó. Tôi không thể có bộ điều khiển của riêng mình ... Tôi đồng ý với Shervin rằng Managed Beans là Bộ điều khiển. Shervin, làm thế nào về việc đăng câu trả lời thay thế của riêng bạn?
yegor256,

1
nó là bí mật FacesServletđang kiểm soát.
Jigar Joshi

@Jigar wikipedia nói rằng "Bộ điều khiển chấp nhận đầu vào từ người dùng và hướng dẫn mô hình và khung nhìn thực hiện các hành động dựa trên đầu vào đó." Tôi nghi ngờ rằng FacesServlet "hướng dẫn mô hình", phải không?
yegor256,

4
Undercover FacesServlet nhận tất cả dữ liệu (ở lớp trên, nó được gọi là bean) từ yêu cầu, phiên, ngữ cảnh ứng dụng và xử lý nó.
Jigar Joshi


-1

Java Server Faces là một khung công tác web MVC trong đó các thành phần MVC như sau,

  1. Mô hình - Nó là lớp bean được quản lý được chú thích bằng @ManagedBean, lớp này có các thuộc tính để lưu giữ dữ liệu và các getters và setters tương ứng. Lớp bean được quản lý cũng có thể chứa logic nghiệp vụ, chúng còn được gọi là lớp đậu hỗ trợ có thể có các phạm vi khác nhau như yêu cầu, phiên, ứng dụng.

  2. Xem - Giao diện người dùng được hiển thị cho máy khách, tức là các tệp .xhtml. Nó lấy dữ liệu từ các bean được quản lý và nó được hiển thị dưới dạng phản hồi.

  3. Bộ điều khiển - javax.servlet.webapp.FacesServlet là lớp bộ điều khiển tập trung về cơ bản là một servlet. Bất kỳ yêu cầu nào đến JSF trước tiên sẽ được chuyển đến bộ điều khiển FacesServlet. Không giống như JSP mà chúng ta viết lớp bộ điều khiển của riêng mình, trong JSF, bộ điều khiển servlet là một phần cố định của khuôn khổ và chúng ta không viết nó.

Dòng chảy MVC-

nhập mô tả hình ảnh ở đây


Câu hỏi này giống với 36 câu hỏi được ủng hộ. Nếu bạn nghĩ rằng câu trả lời có thể được thực hiện rõ ràng hơn, xin vui lòng chỉnh sửa nó
Kukeltje

@Kukeltje Tôi tin rằng câu trả lời của tôi có nhiều giải thích hơn là chỉ đặt tên cho các thành phần MVC.
Hetal Rachh

Giải thích thêm rất ít ... 1: không thực sự vì 'chứa dữ liệu' không phải là điều tốt nhất (nên có trong các thực thể), kinh doanh, không phải là điều tốt nhất vì chúng nên có trong các dịch vụ (xem các liên kết bổ sung trong câu trả lời được ủng hộ nhiều nhất ), 2: không nhiều hơn 3: một văn bản ít hơn nhưng thiếu hình ảnh của câu trả lời khác mà làm cho rõ ràng hơn so với văn bản mà bạn thêm vào ...
Kukeltje

@Kukeltje Cảm ơn nhưng tôi chỉ là người mới bắt đầu với JSF.
Hetal Rachh

Không vấn đề gì. Tôi đã sử dụng nó trong một thời gian dài và thành công rực rỡ. Hãy sở hữu cuốn sách java ee 8 và jsf của Bauke Scholtz và Arjan Thijms. Tuyệt vời đọc và hướng dẫn, nhưng cũng đọc tất cả> 25 upvoted Q / A trong Stackoverflow nhớ tồn tại của họ và bắt đầu với JSF 2.3 và
Kukeltje
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.