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 codesarrow-up-right from my GitHub account.

Last updated