2013-01-21 53 views
9

Trong JSF tôi có thể ánh xạ Servlet Faces đến các mẫu URL khác nhau. Ví dụ. đến *.xhtml.Ánh xạ các tệp JSF .xhtml không có phần mở rộng

Tuy nhiên, những gì tôi muốn là ánh xạ Faclet Servlet tới số số. Có nghĩa là, nếu tôi có một trang customers.xhtml trong gốc web của tôi, tôi muốn yêu cầu điều này bằng cách sử dụng http://example.com/customers.

Tôi đã xem câu hỏi How do I configure JSF url mappings without file extensions? và điều này hoạt động ở một mức độ nào đó, nhưng nó đòi hỏi tôi phải lập bản đồ từng tệp tôi có riêng lẻ (sửa tôi nếu tôi sai).

Tôi làm cách nào để ánh xạ tất cả các tệp .xhtml của mình trong một lần truy cập vào Servlet Faces mà không cần phải ánh xạ chúng riêng lẻ?

Trả lời

9

Không thể sử dụng các phương tiện chuẩn. Về cơ bản, bạn cần phải homebrew một số servlet filter được ánh xạ trên /* và kiểm tra xem URL yêu cầu hiện tại có là một tiện ích mở rộng không và không, sau đó thực hiện cuộc gọi RequestDispatcher#forward() trên URL với phần mở rộng tệp được nối thêm (bạn biết đấy, chuyển tiếp không sửa đổi URL yêu cầu hiện tại dưới dạng chuyển hướng sẽ thực hiện). Bạn cũng cần một phong tục view handler để sản xuất các URL extensionless mong muốn cho JSF <h:form>, <h:link> vv

Ngoài ra, bạn có thể sử dụng PrettyFaces hoặc OmniFaces' FacesViews để bạn không cần phải phát minh lại bánh xe. Ở cuối trang giới thiệu FacesViews, bạn có thể tìm thấy một số liên kết dễ dàng trực tiếp đến mã nguồn có thể cung cấp cho bạn một số nguồn cảm hứng.

+0

Tôi đã tìm kiếm trên web chính xác những gì bạn đang nói. Bạn có biết rằng liệu nó có được lên kế hoạch cho các phiên bản tương lai của JSF sẽ chiêm ngưỡng loại tính năng này không? –

+1

@ João: Có [sơ đồ cụ thể] (https://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-1260) để tích hợp FacesViews trong JSF chuẩn. Nhưng rất nhiều phụ thuộc vào API Servlet 4.0 và thời gian/tài nguyên có sẵn. – BalusC