I have a WAR file with the following structure:

The JSF managed bean BusinessObjectTypeListController is located in commons-web-1.0.jar in /WEB-INF/lib and referenced in BusinessObjectTypeListView.xhtml. When I run my web application and I call that view, I get the following error:
javax.servlet.ServletException: /view/common/businessObjectTypeListView.xhtml @34,94 listener=”#{businessObjectTypeListController.selectData}”: Target Unreachable, identifier ‘businessObjectTypeListController’ resolved to null
Why isn’t the controller class found? It should be in the classpath, is it?
You need to have a JSF 2.0 compliant
/META-INF/faces-config.xmlfile in thecommons-web-1.0.jarfile in order to get JSF to scan the JAR file for classes with JSF annotations like@ManagedBeanand auto-register them.JSF does namely not scan every class of every single JAR file in the classpath, that would have been too expensive. Only JARs with the above
/META-INF/faces-config.xmlfile will be scanned.You should also ensure that you do not have the
metadata-complete="true"attribute in the<faces-config>declaration of webapp’s own/WEB-INF/faces-config.xmlfile, otherwise JSF will assume that this faces config is complete and therefore won’t auto-scan JAR files for annotations.If none of those conditions are (or can be) met, then you need to manually register the bean as
<managed-bean>in webapp’s own/WEB-INF/faces-config.xmlinstead of relying on annotations.See also chapter 11.4.2 of JSF 2.0 specification (emphasis mine).