您的位置:首页 > Web前端

How to reference JSF managed beans which are provided in a JAR file?

2012-11-20 14:05 561 查看


How
to reference JSF managed beans which are provided in a JAR file?






up
vote3down
votefavorite

2

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?

java java-ee jsf-2 jar managed-bean
share|improve
this question
edited Oct
28 '11 at 11:12




BalusC

333k43494767

asked Oct 5 '11 at 15:31





Francesco

318113

92% accept rate
How are you running the application? Did you simply choose to "Run on Server" from Eclipse? Or are you deploying to a container manually?
And which container is this? – Vineet
Reynolds Oct
5 '11 at 15:35
I deploy it using ant into Glassfish. – Francesco Oct
5 '11 at 15:38
feedback


2 Answers

activeoldestvotes

up
vote7down
voteaccepted
You need to have a JSF 2.0 compliant
/META-INF/faces-config.xml
file
in the
commons-web-1.0.jar
file
in order to get JSF to scan the JAR file for classes with JSF annotations like
@ManagedBean
and
auto-register them.
<?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">
</faces-config>


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.xml
file
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.xml
file,
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.xml
instead
of relying on annotations.

See also chapter 11.4.2 of JSF
2.0 specification (emphasis mine).


11.4.2 Application Startup Behavior

...

This algorithm provides considerable flexibility for developers that are assembling the components of a JSF-based web application. For example, an application might include one or more custom UIComponent implementations, along with associated Renderers, so
it can declare them in an application resource named “/WEB-INF/faces-config.xml” with no need to programmatically register them with Application instance. In addition, the application might choose to include a component library (packaged as a JAR file) that
includes a “META-INF/faces-config.xml” resource. The existence of this resource causes components, renderers, and other JSF implementation classes that
are stored in this library JAR file to be automatically registered, with no action required by the application.

share|improve
this answer
edited Oct
28 '11 at 11:13

answered Oct 5 '11 at 15:37




BalusC

333k43494767

Now it works! Thank you very much!! – Francesco Oct
5 '11 at 16:01
You're welcome. – BalusC Oct
5 '11 at 16:02
本文转自:http://stackoverflow.com/questions/7663818/how-to-reference-jsf-managed-beans-which-are-provided-in-a-jar-file
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐