2013-11-28 16 views
9

Tôi đang xem xét một dự án JSF hiện tại nơi cấu hình web.xml chứa:Cấu hình của com.sun.faces.config.ConfigureListener

  • các FacesServlet (cấu hình trên *.xhtml)
  • các com.sun.faces.config.ConfigureListener

Tôi đang sử dụng JSF 2.2 và triển khai Mojarra.

Tôi đang bối rối về số ConfigureListener. Lớp này có cần thiết trong cấu hình không? Mục tiêu của lớp này là gì? Tôi không thể tìm thấy bất kỳ thông tin nào và lớp học hầu như không có javadoc.

Nếu tôi xóa cấu hình này, mọi thứ dường như hoạt động theo cùng một cách. Vì vậy, tôi đoán rằng ConfigureListener có thể hoặc cần được loại bỏ nhưng tôi không chắc chắn.

+0

Hãy tìm http://www.coderanch.com/t/428264/JSF/java/function-listener-sun-faces-config – Willmore

Trả lời

10

ConfigureListener thường được đăng ký tự động qua tệp của tệp JAR triển khai Mojarra. Ngoài ra, ConfigureListener được đăng ký rõ ràng qua Servlet 3.0 ServletContainerInitializer để giải quyết lỗi GlassFish v3 cũ (lưu ý: v3, không phải 3.0.x, do đó thực sự là phiên bản GF3 đầu tiên bao giờ).

Có các tình huống trong đó đăng ký tự động qua .tld tệp không đủ. Một trong những nổi tiếng là khi webapp được triển khai để Jetty. Điều này được giải thích chi tiết trong Q & A: could not find Factory: javax.faces.context.FacesContextFactory.

Ngoài ra, như đã đề cập trước đó và trong câu trả lời chi tiết đó, GlassFish v3 có lỗi trong đó tệp TLD được quét quá muộn và do đó JSF không thể thực hiện việc khởi tạo cần thiết vào đúng thời điểm. Sau đó, bạn cần đăng ký một cách rõ ràng ConfigureListener trong trang web web.xml của webapp.

Nhưng nếu nó hoạt động cho bạn khi nó không được đăng ký rõ ràng trong web.xml, thì hãy giữ nó ra. Ít tiếng ồn hơn trong web.xml là tốt hơn. Nhưng nếu bạn có thể triển khai một vùng chứa nhạy cảm với vấn đề được đề cập (vì vậy khi webapp của bạn thực sự được phân phối công khai và bạn không có quyền kiểm soát lựa chọn vùng chứa đích), thì bạn nên giữ nó trong "đối với trường hợp cái đó".


Cập nhật: Dường như Tomcat 8.x cho thấy hành vi lỗi khi cụm từ này được kích hoạt trong web.xml: nghe điều này thực sự sẽ được thực hiện hai lần thay vì chỉ một lần. Hậu quả là tai hại: trong số những người khác, tất cả các trình lắng nghe sự kiện JSF sẽ được đăng ký hai lần và các thư viện thành phần sẽ được tải hai lần. Điều này dẫn đến xung đột trong thời gian chạy. Nói cách khác, khi triển khai vào Tomcat, hãy đảm bảo rằng mục nhập này bị xóa khỏi web.xml.

+0

Cảm ơn câu trả lời này. Tôi nhận ra rằng 'FacesServlet' được cấu hình trên'/*. Xhtml'. Tôi đã cập nhật câu hỏi. – LaurentG

+0

Bạn được chào đón. Tôi nghi ngờ điều đó. Đây là cú pháp bất hợp pháp. Tôi đã cập nhật câu hỏi Q với đúng. – BalusC

+0

Bạn nói đúng (một lần nữa). Xin lỗi tôi đã kiểm tra quá nhanh. Tôi có '* .xhtml'. – LaurentG