Qual è l'uso di faces-config.xml in JSF 2?


89

Dopo il grande supporto JSF 2 per le annotazioni, mi chiedo per cosa userei il file faces-config.xml. Qual è la sua importanza adesso?

In altre parole, quali sono le configurazioni che possono essere eseguite solo tramite faces-config.xmle non tramite annotazioni?

In questo momento tutto ciò per cui lo sto usando è dichiarare il risolutore EL di 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
Perché è necessario specificare ELResolver integrato? Pensavo che la filosofia del design fosse la convenzione sulla configurazione ...
masterxilo

Anche io non ne ho <el-resolver>nel mio faces-config.xmle funziona perfettamente.
Roland

Risposte:


142

Deve ancora essere utilizzato per molte cose che non possono essere annotate. Ad esempio, messaggi di convalida JSF personalizzati:

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

Un bundle i18n globale (in modo che non sia necessario dichiararlo <f:loadBundle>in ogni vista):

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

Impostazioni locali i18n supportate esplicitamente (in modo che quelle non dichiarate verranno ignorate anche se è presente un bundle di messaggi o un bundle di risorse):

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

Gestori di visualizzazione personalizzati :

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

Listener di fase (non c'è ancora alcuna annotazione per questo):

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

Fagioli Managed che non possono essere annotati (il sottostante si dà corrente Datesu #{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>

Fabbriche personalizzati, come fabbrica di gestore di eccezioni personalizzate (permette anche fabbriche per FacesContext, ExternalContext, LifeCyclee molti altri in modo da poter fornire l'implementazione su ordinazione):

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

Per citare solo quelli comunemente usati. Se hai il faces-config.xmlcompletamento automatico dei tag nel tuo IDE, puoi scoprirli tutti. Solo i bean gestiti, i validatori, i convertitori, i componenti, i renderizzatori ei casi di navigazione point-to-point non sono più necessari grazie alle nuove annotazioni e alla navigazione implicita.


7
@ Matt: ho avuto un progetto in cui un java.util.HashMapas #{components}è archiviato nell'ambito della richiesta per avere una migliore panoramica dichiarativa di tutti i collegamenti dei componenti. Ad esempio, in binding="#{components.foo}"modo che possa essere referenziato come #{components.foo}più auto-documentante e meno rischioso (a causa di potenziali conflitti di nome) di binding="#{foo}"e #{foo}.
BalusC

2
Stavo anche cercando qualche annotazione per specificare el-resolver. Ora penso che non ci sia modo di specificare queste proprietà dell'applicazione tramite annotation..right .. ??
Rup Majumder

@RupMajumder Dove vuoi mettere un'annotazione del genere, intendo su quale classe? Questa proprietà è diffusa su tutta l'applicazione.
iozee

1
FWIW, quando si utilizza Apache Deltaspike, l'annotazione JsfPhaseListener può essere utilizzata per utilizzare i listener di fase senza la necessità di configurarli in faces-config.xml.
jpangamarca
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.