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>
faces-config. xml is found in the META-INF directory of a jar in the application's classpath. The javax. faces.
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.
FacesServlet is a servlet that manages the request processing lifecycle for web applications that are utilizing JavaServer Faces to construct the user interface.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With