2011-12-12 64 views
5

Cách tốt nhất để xử lý các ngoại lệ "không được kiểm tra" trong một ứng dụng web JSF2 là gì?Xử lý ngoại lệ JSF2

Hiện tại, tôi để chúng chảy cho đến thùng chứa servlet và tôi chuyển hướng (thông qua tệp web.xml) đến trang lỗi jsp hiển thị thông báo thân thiện và thông tin ngoại lệ.

Tốt hơn là xử lý chúng bằng "trình xử lý ngoại lệ tùy chỉnh" (như Ed Burns đã nói trong sách "JSF 2.0 - Tham chiếu hoàn chỉnh").

Trong cả hai trường hợp ("web.xml" hoặc "xử lý ngoại lệ"): Tôi có phải chuyển hướng đến trang jsp thay vì trang facelet không? (bởi vì ngoại lệ có thể do một vấn đề jsf gây ra và có thể dẫn đến một vòng lặp). Hoặc tôi có thể chuyển hướng đến một trang facelet? Việc chuyển hướng đến trang jsp có bất lợi khi phải định cấu hình ứng dụng jsf để thừa nhận cả jsp và facelets (nó sẽ sạch hơn, chỉ có các trang facelet).

Cuối cùng, một câu hỏi khác: "Trình xử lý ngoại lệ tùy chỉnh" cũng xử lý các ngoại lệ "đã chọn"? Hiện tại, tôi xử lý chúng trong các bean được quản lý (bắt chúng và hiển thị một facemessage trong trang ứng dụng).

Trả lời

6

Cách tốt nhất để xử lý ngoại lệ "không được kiểm tra" trong ứng dụng web JSF2 là gì?

Tất cả phụ thuộc vào các yêu cầu chức năng. Các ngoại lệ không được kiểm tra thường chỉ ra các lỗi và sự cố cấu hình trong ứng dụng web của bạn. Họ thường không nên bị bắt nhưng chỉ bong bóng vào thùng chứa. Chúng thường không phải là lỗi của người cuối cùng mà chỉ là lỗi của nhà phát triển hoặc serveradmin.


Hiện nay, tôi cho họ chảy đến servlet container, và tôi chuyển hướng (thông qua các tập tin web.xml) đến một trang lỗi jsp cho thấy một thông điệp thân thiện và các thông tin ngoại lệ.

Tốt hơn là xử lý chúng bằng "trình xử lý ngoại lệ tùy chỉnh" (như Ed Burns đã nói trong sách "JSF 2.0 - Tham chiếu hoàn chỉnh").

Việc xử lý ngoại lệ tùy chỉnh đặc biệt hữu ích nếu bạn muốn có một điều khiển hạt mịn hơn so với trường hợp ngoại lệ trên không đồng bộ (ajax, XMLHttp) yêu cầu khi chúng không được xử lý bởi <error-page> trong web.xml. Với trình xử lý ngoại lệ tùy chỉnh, bạn sẽ có thể điều hướng đến một trang lỗi cụ thể để nó sẽ được hiển thị trong vinh quang đầy đủ của nó thay vì một thông báo ngoại lệ bí ẩn trong hộp thoại cảnh báo JavaScript. Nhưng đối với trường hợp ngoại lệ trên các yêu cầu đồng bộ (HTTP bình thường), nó hơi quá mức so với <error-page> trong web.xml.


Trong cả hai trường hợp ("web.xml" hoặc "xử lý ngoại lệ"): Tôi có phải chuyển hướng đến một trang jsp thay vì trang facelet? (bởi vì ngoại lệ có thể do một vấn đề jsf gây ra và có thể dẫn đến một vòng lặp). Hoặc tôi có thể chuyển hướng đến một trang facelet? Việc chuyển hướng đến trang jsp có bất lợi khi phải định cấu hình ứng dụng jsf để thừa nhận cả jsp và facelets (nó sẽ sạch hơn, chỉ có các trang facelet).

Chỉ cần đảm bảo rằng trang ngoại lệ không có lỗi. Điều này bất kể đó là trang JSP hoặc Facelets. Các lỗi có thể leo lên bên trong các trang JSP là tốt.


Cuối cùng, một câu hỏi khác: Các "tùy chỉnh ngoại lệ xử lý" xử lý "kiểm tra" ngoại lệ không? Hiện tại, tôi xử lý chúng trong các bean được quản lý (bắt chúng và hiển thị một facemessage trong trang ứng dụng).

Nó xử lý tất cả các loại ngoại lệ.

+0

Cảm ơn bạn BaluC. Chỉ một câu hỏi: nó không phải là một thực tế xấu sau đó sử dụng một trang lỗi facelet? (chỉ hiển thị thông báo và thông tin ngoại lệ). Nó hoạt động ngay cả khi ngoại lệ được gây ra bởi khung công tác jsf? – choquero70

+0

Vâng, nếu ngoại lệ được gây ra bởi một số lỗi trong việc triển khai JSF, thì nó có khả năng không chỉ hiển thị trên trang lỗi, mà còn trên tất cả các trang khác. – BalusC

+0

Bạn đúng ... nhưng trong trường hợp đó (biểu hiện trên các trang JSF khác), nếu chúng tôi có trang lỗi JSP, nó sẽ hiển thị lỗi chính xác. Nếu không, nếu chúng tôi có trang lỗi Facelets, nó sẽ không hoạt động. Vì vậy, nó không phải là tốt hơn các trang lỗi là JSP? Tôi muốn câu trả lời là KHÔNG, vì vậy mà tôi sẽ không có JSP và Facelets trộn lẫn trong ứng dụng :) Nhưng tôi sợ nó là CÓ. Bạn sử dụng những gì trong ứng dụng của mình, trang lỗi JSP hoặc trang Lỗi Facelet? – choquero70