Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the use of faces-config.xml in JSF 2?

After the JSF 2 big support for annotations, I'm wondering what I would use the faces-config.xml for. What is its importance now?

In other words, what are the configurations that can only be done through faces-config.xml and not via annotations?

Right now all what I am using it for is to declare Spring's EL resolver.

<?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> 
like image 458
Mahmoud Saleh Avatar asked Sep 28 '11 12:09

Mahmoud Saleh


People also ask

Where is faces-config xml?

faces-config. xml is found in the META-INF directory of a jar in the application's classpath. The javax. faces.

What is web xml JSF?

xml is the deployment descriptor file and it is part of the servlet standard for web applications. It is used to determine how URLs map to servlets, which URLs require authentication, and other information.

What is JSF Faces servlet?

FacesServlet is a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.

What is JSF and why it is used?

JavaServer Faces (JSF) is a new standard Java framework for building Web applications. It simplifies development by providing a component-centric approach to developing Java Web user interfaces. JavaServer Faces also appeals to a diverse audience of Java/Web developers.


1 Answers

It's still to be used for many things which can't be annotated. E.g. custom JSF validation messages:

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

A global i18n bundle (so that you don't need to declare <f:loadBundle> in every view):

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

Explicitly supported i18n locales (so that the not-declared ones will be ignored even though there's a message bundle or resource bundle for it):

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

Custom view handlers:

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

Phase listeners (there's still no annotation for that):

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

Managed beans which can't be annotated (the below one gives current Date on #{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> 

Custom factories, such as custom exception handler factory (it also allows factories for FacesContext, ExternalContext, LifeCycle and many more so that you can provide your custom implementation):

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

To name only the commonly used ones. If you have faces-config.xml tag autocompletion in your IDE, you can find them all out. Only the managed beans, validators, converters, components, renderers and point-to-point navigation cases are not needed anymore thanks to the new annotations and implicit navigation.

like image 112
BalusC Avatar answered Oct 13 '22 01:10

BalusC