Nhược điểm của JSF 2.0? Thành thật mà nói, ngoài đường cong học tập tương đối dốc khi bạn không có kiến thức nền tảng vững chắc về Phát triển Web cơ bản (HTML / CSS / JS, phía máy chủ so với phía máy khách, v.v.) và API Servlet Java cơ bản (yêu cầu / phản hồi / phiên , chuyển tiếp / chuyển hướng, v.v.), không có nhược điểm nghiêm trọng nào xuất hiện trong tâm trí. JSF trong bản phát hành hiện tại vẫn cần phải loại bỏ hình ảnh tiêu cực mà nó đạt được trong thời kỳ đầu, trong đó có một số nhược điểm nghiêm trọng.
JSF 1.0 (tháng 3 năm 2004)
Đây là bản phát hành ban đầu. Nó đã bị lộn xộn với các lỗi trong cả lĩnh vực cốt lõi và hiệu suất mà bạn không muốn biết. Ứng dụng web của bạn không phải lúc nào cũng hoạt động như bạn mong đợi bằng trực giác. Bạn là nhà phát triển sẽ khó khóc.
JSF 1.1 (tháng 5 năm 2004)
Đây là bản phát hành lỗi. Hiệu suất vẫn không được cải thiện nhiều. Ngoài ra còn có một nhược điểm lớn: bạn không thể nội tuyến HTML trong trang JSF một cách hoàn hảo. Tất cả HTML vanilla đơn giản được hiển thị trước cây thành phần JSF. Bạn cần bọc tất cả các vani đơn giản trong <f:verbatim>
các thẻ để chúng được bao gồm trong cây thành phần JSF. Mặc dù điều này là theo đặc điểm kỹ thuật, điều này đã nhận được rất nhiều lời chỉ trích. Xem thêm ao JSF / Facelets: tại sao không nên kết hợp JSF / Facelets với các thẻ HTML?
JSF 1.2 (tháng 5 năm 2006)
Đây là bản phát hành đầu tiên của nhóm phát triển JSF mới do Ryan Lubke lãnh đạo. Nhóm mới đã làm rất nhiều công việc tuyệt vời. Cũng có những thay đổi trong thông số kỹ thuật. Sự thay đổi lớn là sự cải thiện của việc xử lý khung nhìn. Điều này không chỉ tách rời hoàn toàn JSF khỏi JSP, do đó, người ta có thể sử dụng công nghệ khung nhìn khác với JSP, nhưng nó cũng cho phép các nhà phát triển nội tuyến HTML vanilla đơn giản trong trang JSF mà không gặp rắc rối với <f:verbatim>
các thẻ. Một trọng tâm lớn khác của nhóm mới là cải thiện hiệu suất. Trong suốt thời gian thực hiện Tham chiếu JSF Mặt trời 1.2 (có tên mã là Mojarra kể từ bản dựng 1.2_08, khoảng năm 2008), thực tế mọi bản dựng đều được cung cấp với các cải tiến hiệu suất (chính) bên cạnh các lỗi (thông thường) thông thường.
Nhược điểm nghiêm trọng duy nhất của JSF 1.x (bao gồm 1.2) là thiếu phạm vi ở giữa phạm vi yêu cầu và phiên , phạm vi được gọi là phạm vi hội thoại . Điều này buộc các nhà phát triển phải gặp rắc rối với các yếu tố đầu vào ẩn, truy vấn DB không cần thiết và / hoặc lạm dụng phạm vi phiên bất cứ khi nào muốn giữ lại dữ liệu mô hình ban đầu trong yêu cầu tiếp theo để xử lý thành công xác thực, chuyển đổi, thay đổi mô hình và yêu cầu hành động trong hơn ứng dụng web phức tạp. Nỗi đau có thể được làm dịu bằng cách áp dụng thư viện của bên thứ 3 lưu giữ dữ liệu cần thiết trong yêu cầu tiếp theo như thành phần MyFaces Tomahawk <t:saveState>
, phạm vi hội thoại JBoss Seam và Dàn nhạc MyFaces khung hội thoại.
Một nhược điểm khác của những người theo chủ nghĩa thuần túy HTML / CSS là JSF sử dụng :
ký tự dấu phân cách ID để đảm bảo tính duy nhất của phần tử HTML id
trong đầu ra HTML được tạo, đặc biệt là khi một thành phần được sử dụng lại nhiều lần trong chế độ xem (tạo khuôn mẫu, lặp lại các thành phần, v.v.) . Vì đây là một ký tự không hợp lệ trong số nhận dạng CSS, bạn sẽ cần sử dụng \
để thoát dấu hai chấm trong bộ chọn CSS, dẫn đến các bộ chọn xấu và trông kỳ quặc như #formId\:fieldId {}
hoặc thậm chí #formId\3A fieldId {}
. Xem thêm Cách sử dụng ID phần tử HTML được tạo bởi JSF với dấu hai chấm ":" trong bộ chọn CSS? Tuy nhiên, nếu bạn không phải là người theo chủ nghĩa thuần túy, hãy đọc theo mặc định, JSF tạo ra các id không sử dụng được, không tương thích với một phần css của các tiêu chuẩn web .
Ngoài ra, JSF 1.x đã không giao hàng với các cơ sở Ajax ra khỏi hộp. Không thực sự là một bất lợi về kỹ thuật, nhưng do sự cường điệu của Web 2.0 trong khoảng thời gian đó, nó đã trở thành một bất lợi về chức năng. Exadel đã sớm giới thiệu Ajax4jsf, được phát triển kỹ lưỡng trong những năm qua và trở thành phần cốt lõi của thư viện thành phần JBoss RichFaces . Một thư viện thành phần khác cũng được vận chuyển với các quyền hạn Ajax dựng sẵn, một thư viện nổi tiếng là ICEfaces .
Khoảng nửa vòng đời của JSF 1.2, một công nghệ xem dựa trên XML mới đã được giới thiệu: Facelets . Điều này mang lại những lợi thế to lớn trên JSP, đặc biệt là trong lĩnh vực tạo khuôn mẫu.
JSF 2.0 (tháng 6 năm 2009)
Đây là bản phát hành lớn thứ hai, với Ajax là từ thông dụng. Có rất nhiều thay đổi về kỹ thuật và chức năng. JSP được thay thế bởi Facelets là công nghệ chế độ xem mặc định và Facelets được mở rộng với các khả năng để tạo các thành phần tùy chỉnh bằng cách sử dụng XML thuần (cái gọi là các thành phần hỗn hợp ). Xem thêm Tại sao Facelets được ưa thích hơn JSP làm ngôn ngữ định nghĩa khung nhìn từ JSF2.0 trở đi?
Sức mạnh Ajax đã được giới thiệu trong hương vị của <f:ajax>
thành phần có nhiều điểm tương đồng với Ajax4jsf. Chú thích và cải tiến cấu hình quá mức đã được giới thiệu để tiêu diệtfaces-config.xml
tệp verbose càng nhiều càng tốt. Ngoài ra, ký tự phân cách ID bộ chứa đặt tên mặc định có thể định :
cấu hình được, vì vậy những người theo chủ nghĩa thuần túy HTML / CSS có thể thở phào nhẹ nhõm. Tất cả bạn cần làm là xác định nó như init-param
trong web.xml
với tên javax.faces.SEPARATOR_CHAR
và đảm bảo rằng bạn không sử dụng các nhân vật cho mình bất cứ nơi nào trong ID khách hàng, chẳng hạn như -
.
Cuối cùng nhưng không kém phần quan trọng, một phạm vi mới đã được giới thiệu, phạm vi xem . Nó đã loại bỏ nhược điểm lớn khác của JSF 1.x như được mô tả trước đây. Bạn chỉ cần khai báo bean @ViewScoped
để kích hoạt phạm vi hội thoại mà không làm phiền tất cả các cách để giữ lại dữ liệu trong các yêu cầu (hội thoại) tiếp theo. Một @ViewScoped
bean sẽ tồn tại miễn là sau đó bạn gửi và điều hướng đến cùng một chế độ xem (độc lập với tab / cửa sổ trình duyệt đã mở!), Đồng bộ hoặc không đồng bộ (Ajax). Xem thêm Sự khác biệt giữa phạm vi Xem và Yêu cầu trong các hạt được quản lý và Cách chọn phạm vi đậu đúng?
Mặc dù thực tế tất cả các nhược điểm của JSF 1.x đã được loại bỏ, có những lỗi cụ thể của JSF 2.0 có thể trở thành một showstopper. Các @ViewScoped
thất bại trong xử lý thẻ do một vấn đề gà-trứng trong tiết kiệm nhà nước một phần. Điều này được cố định trong JSF 2.2 và được nhập vào Mojarra 2.1.18. Ngoài ra, việc chuyển các thuộc tính tùy chỉnh như HTML5data-xxx
không được hỗ trợ. Điều này được cố định trong JSF 2.2 bởi tính năng các yếu tố / thuộc tính thông qua mới. Hơn nữa, việc triển khai JSF Mojarra có các vấn đề riêng . Tương đối nhiều trong số họ có liên quan đến hành vi đôi khi unintuitive của<ui:repeat>
, các phần thực hiện tiết kiệm nhà nước mới và phạm vi đèn flash thực hiện kém . Hầu hết chúng được cố định trong phiên bản Mojarra 2.2.x.
Trong khoảng thời gian JSF 2.0, PrimeFaces đã được giới thiệu, dựa trên jQuery và jQuery UI. Nó trở thành thư viện thành phần JSF phổ biến nhất.
JSF 2.2 (tháng 5 năm 2013)
Với sự ra đời của JSF 2.2, HTML5 đã được sử dụng làm từ thông dụng mặc dù về mặt kỹ thuật này chỉ được hỗ trợ trong tất cả các phiên bản JSF cũ hơn. Xem thêm Hỗ trợ JavaServer Faces 2.2 và HTML5, tại sao XHTML vẫn được sử dụng . Tính năng mới nhất của JSF 2.2 là hỗ trợ cho các thuộc tính thành phần tùy chỉnh, qua đó mở ra một thế giới khả năng, chẳng hạn như các nhóm nút radio không cần thẻ .
Ngoài các lỗi cụ thể khi triển khai và một số "điều nhỏ phiền toái" như không thể tiêm EJB vào trình xác nhận / trình chuyển đổi (đã được sửa trong JSF 2.3), không có nhược điểm thực sự nào trong đặc tả của JSF 2.2.
Thành phần dựa trên MVC và Yêu cầu dựa trên MVC
Một số người có thể lựa chọn rằng nhược điểm lớn của JSF là nó cho phép kiểm soát rất ít chi tiết đối với HTML / CSS / JS được tạo. Đó không phải là của riêng JSF, đó chỉ là vì nó là khung MVC dựa trên thành phần , không phải là khung MVC dựa trên yêu cầu (hành động) . Nếu mức độ cao của việc kiểm soát HTML / CSS / JS là yêu cầu chính của bạn khi xem xét khung MVC, thì bạn không nên xem xét một khung MVC dựa trên thành phần, mà ở một khung MVC dựa trên yêu cầu như Spring MVC . Bạn chỉ cần tính đến việc bạn sẽ phải tự viết tất cả các bản HTML / CSS / JS đó. Xem thêm Sự khác biệt giữa Yêu cầu MVC và Thành phần MVC .
Xem thêm: