equinox,在其他包中找不到Bean类
在OSGi环境中运行JSF时遇到问题。 我使用jetty web容器和equinox来提供OSGi功能。 我的应用程序的结构如下所示:第一个包包含所有JSF库, web.xml
和一个config.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的类加载器找不到它,它不知道它。 所以我想问问有没有人知道如何解决这个问题。 如果是这样,请帮助我,我已经尝试了我所有的可能性..
实际上是否有可能让JSF在使用相同FaceletsContex
多个bundle上运行? 我可以在每个捆绑包中都有独立的faces-config.xml文件,它们可以在其他捆绑包中连接到其他faces-config.xml文件中? 任何人都可以请给我一个解决方案。 示例代码将有所帮助。
如果任何人对答案感兴趣,在这种情况下,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文件中,这似乎是非常有利的。
链接地址: http://www.djcxy.com/p/74645.html