在jetty-equinox中的JSF,在其他bundle中找不到Bean类

时间:2010-03-13 12:58:20

标签: jsf jetty equinox

我在OSGi环境中运行JSF时遇到问题。我使用jetty web容器和equinox来提供OSGi功能。我的申请结构如下: 第一个包具有所有JSF库,web.xmlconfig.xml。它看起来如下:

bundle1
----src/main/java
-------de/package
----------Activator.java
----------JSFResolver.java
----src/main/resource
------ WebContent
----------META-INF
-------------face-config.xml
-------------web.xhtml
----------start.xhtml
-----------include.xhtml
----libs (containing all JSF required Jars)

第二捆的结构如下:

bundle2
---src/main/java
------de/package
----------Bean.java
---src/main/resource
------META-INF
---------face-config.xml
------WebContent
---------index.xhtml

运行equinox的应用程序时,bundle1是发送所有浏览器请求的主捆绑包。在第二个包中,可以根据请求通过第一个包检索index.xhtml文件。 bundle 2中的index.xhtml从bundle 2中的'Bean.java'获取它的值和属性。当我请求'index.xhtml'时,问题就来了,找不到Bean.java类。我认为这是因为bundle1的类加载器找不到它,它不知道它。所以我想问一下是否有人知道如何解决这个问题。如果是这样,请帮助我,我已经尝试了所有的可能性..

实际上是否可以使用相同的FaceletsContex在多个捆绑包上运行JSF?我可以在每个捆绑包中分别使用faces-config.xml文件,这些文件可以连接到其他捆绑包中的其他faces-config.xml吗?任何人都可以请我提供解决方案。示例代码会有所帮助。

1 个答案:

答案 0 :(得分:0)

如果有人对答案感兴趣,在这种情况下,faces-config.xml是没用的。所以我不得不使用plug-in.xml文件在所有插件项目中注册我的所有bean。我在主插件中创建了一个扩展点,其他插件可以将其Bean注册为扩展。我不得不重写JSF的managedBean类,因为它能够从扩展点而不是faces-config.xml读取bean属性。 因此,在运行时,应用程序将读取在managedBeans扩展点中注册的所有扩展,然后从所有插件创建所有必需的Bean实例。因此错误将不再存在。如果有人想在这样的结构中实现JSF,你应该知道faces-config.xml中的几乎所有功能都必须移动到插件的plug-in.xml,这包括导航规则以及。一个人必须做很多自定义,但最后,你会在equinox上运行一个很好的模块化JSF应用程序,而不必将它嵌入到.WAR文件中......这似乎非常有利。