Яка користь face-config.xml у JSF 2?


89

Після великої підтримки JSF 2 для анотацій, мені цікаво, для чого я б використав faces-config.xml. Яке його значення зараз?

Іншими словами, які конфігурації можна зробити лише за faces-config.xmlдопомогою анотацій, а не за допомогою них?

Зараз все, для чого я його використовую, - це оголосити резольвер EL 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
Чому нам потрібно вказувати вбудований ELResolver? Я думав, що філософія дизайну - це домовленість щодо конфігурації ...
masterxilo

У мене теж немає <el-resolver>в своєму, faces-config.xmlі він працює ідеально.
Роланд,

Відповіді:


142

Він все ще використовується для багатьох речей, які не можна анотувати. Наприклад, власні повідомлення про перевірку JSF:

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

Глобальний пакет i18n (так що вам не потрібно оголошувати <f:loadBundle>в кожному поданні):

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

Явно підтримувані локалі i18n (так що незадекларовані будуть проігноровані, навіть якщо для них є пакет повідомлень або пакет ресурсів):

<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>

Спеціальні обробники подання :

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

Фазові прослуховувачі (до цього часу немає анотації):

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

Керовані боби , які не можуть бути анотований (нижче один дає струм DateON #{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>

Призначені для користувача фабрики, такі як обробник виключень завод (це також дозволяє заводи для FacesContext, ExternalContext, LifeCycleі багатьох інших , так що ви можете надати власну реалізацію):

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

Назвати лише загальновживані. Якщо faces-config.xmlу вашому IDE є автозаповнення тегів, ви зможете знайти їх усі. Тільки керовані компоненти, валідатори, перетворювачі, компоненти, візуалізатори та випадки навігації від точки до точки більше не потрібні завдяки новим анотаціям та неявній навігації.


7
@Matt: У мене був проект, де java.util.HashMapas #{components}зберігається в області запитів, щоб мати кращий декларативний огляд усіх прив'язок компонентів. Наприклад , binding="#{components.foo}"так , щоб його можна посилатися як на #{components.foo}який більш самодокументірованно і менш ризикованому (з - за можливі зіткнення імен) , ніж binding="#{foo}"та #{foo}.
BalusC

2
Я також шукав якусь анотацію для вказівки el-resolver. Тепер я думаю, що немає можливості вказати ці властивості програми за допомогою анотації .. добре .. ??
Rup Majumder

@RupMajumder Де ви хочете розмістити таку анотацію, я маю на увазі на якому класі? Ця властивість поширюється на всю програму.
iozee

1
FWIW, при використанні Apache Deltaspike, анотація JsfPhaseListener може використовуватися для використання фазових прослуховувачів без необхідності їх конфігурації в faces-config.xml.
jpangamarca
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.