Việc sử dụng face-config.xml trong JSF 2 là gì?


89

Sau khi hỗ trợ lớn JSF 2 cho các chú thích, tôi đang tự hỏi mình sẽ sử dụng nó faces-config.xmlđể làm gì. Tầm quan trọng của nó bây giờ là gì?

Nói cách khác, những cấu hình chỉ có thể được thực hiện thông qua faces-config.xmlvà không thông qua chú thích là gì?

Hiện tại, tất cả những gì tôi đang sử dụng nó là khai báo trình phân giải EL của Spring.

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <application>
        <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
        </el-resolver>
    </application> 
</faces-config>

1
Tại sao chúng ta cần chỉ định ELResolver nội trang? Tôi nghĩ triết lý thiết kế là quy ước về cấu hình ...
masterxilo

Tôi cũng không có <el-resolver>trong tôi faces-config.xmlvà nó đang hoạt động hoàn hảo.
Roland

Câu trả lời:


142

Nó vẫn được sử dụng cho nhiều thứ không thể chú thích. Ví dụ: thông báo xác thực JSF tùy chỉnh:

<application>
    <message-bundle>com.example.i18n.messages</message-bundle>
</application>

Gói i18n toàn cục (để bạn không cần khai báo <f:loadBundle>trong mọi chế độ xem):

<application>
    <resource-bundle>
        <base-name>com.example.i18n.Text</base-name>
        <var>text</var>
    </resource-bundle>
</application>

Các ngôn ngữ i18n được hỗ trợ rõ ràng (để các ngôn ngữ không được khai báo sẽ bị bỏ qua mặc dù có một gói thông báo hoặc gói tài nguyên cho nó):

<application>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>nl</supported-locale>
        <supported-locale>es</supported-locale>         
        <supported-locale>de</supported-locale>         
    </locale-config>
</application>

Trình xử lý chế độ xem tùy chỉnh :

<application>
    <view-handler>com.example.SomeViewHandler</view-handler>
</application>

Trình nghe giai đoạn (vẫn không có chú thích cho điều đó):

<lifecycle>
    <phase-listener>com.example.SomePhaseListener</phase-listener>
</lifecycle>

Đậu được quản lý mà không thể được chú thích (dưới đây một cho hiện tại Datetrên #{now}):

<managed-bean>
    <description>Current date and time</description>
    <managed-bean-name>now</managed-bean-name>
    <managed-bean-class>java.util.Date</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

Nhà máy tùy chỉnh, chẳng hạn như nhà máy xử lý ngoại lệ tùy chỉnh (nó cũng cho phép các nhà máy cho FacesContext, ExternalContext, LifeCyclevà nhiều hơn nữa để bạn có thể cung cấp thực hiện tùy chỉnh của bạn):

<factory>
    <exception-handler-factory>com.example.SomeExceptionHandlerFactory</exception-handler-factory>
</factory>

Chỉ đặt tên cho những cái thường dùng. Nếu bạn có faces-config.xmltự động hoàn thành thẻ trong IDE của mình, bạn có thể tìm thấy tất cả chúng. Chỉ các bean được quản lý, trình xác thực, trình chuyển đổi, thành phần, trình kết xuất và trường hợp điều hướng điểm-điểm là không cần thiết nữa nhờ có chú thích mới và điều hướng ngầm định.


7
@Matt: Tôi đã có một dự án trong đó một java.util.HashMapas #{components}được lưu trữ trong phạm vi yêu cầu để có một cái nhìn tổng quan về khai báo tốt hơn về tất cả các ràng buộc thành phần. Ví dụ: binding="#{components.foo}"để nó có thể được tham chiếu vì #{components.foo}nó tự lập tài liệu hơn và ít rủi ro hơn (do xung đột tên tiềm ẩn) hơn binding="#{foo}"#{foo}.
BalusC

2
Tôi cũng đang tìm kiếm một số chú thích để chỉ định el-Resolutionver. Bây giờ tôi nghĩ rằng không có cách nào để chỉ định các thuộc tính ứng dụng này thông qua chú thích..right .. ??
Rup Majumder

@RupMajumder Bạn muốn đặt một chú thích như vậy ở đâu, ý tôi là ở lớp nào? Thuộc tính này được lan truyền trên toàn bộ ứng dụng.
iozee

1
FWIW, khi sử dụng Apache Deltaspike, chú thích JsfPhaseListener có thể được sử dụng để sử dụng trình nghe giai đoạn mà không cần định cấu hình chúng trong face-config.xml.
jpangamarca
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.