Run applications in JSF 2.2 compatible mode

For those not ready for new CDI activation, JSF 2.3 provides a compatible mode to make your codes working seamlessly with a JSF 2.2 faces-config.xml.

In contrast with the former JSF 2.3 configuration, we should perform some modification here.

  1. Use a 2.2 versioned faces-config.xml instead. ​

     <?xml version='1.0' encoding='UTF-8'?>
     <faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
           version="2.2">
     </faces-config>
  2. Declare a beans.xml, CDI is enabled by default in Java EE 7, so it is optional.

     <?xml version="1.0" encoding="UTF-8"?>
     <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
            bean-discovery-mode="all" 
            version="2.0">
     </beans>
  3. Add 3.1 versioned web.xml. It is optional, but the compatible mode only works with 3.1, does not work with a 4.0 versioned web.xml.

     <?xml version="1.0" encoding="UTF-8"?>
     <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
              version="3.1">
     </web-app>
  4. Remove the @FacesConfig annotated class, it is only for JSF 2.3.

Done.

Now create a simple sample to try it.

Firstly create a simple backing bean.

And a simple Facelets template.

In NetBeans IDE, run it on Glassfish directly, finally it will open the home page.

Get the source codes from my GitHub account.

Last updated

Was this helpful?