0

我在 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)

第二个bundle的结构如下:

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

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

实际上是否有可能让 JSF 在使用相同的多个捆绑包上运行FaceletsContex?我可以在每个包中拥有单独的 faces-config.xml 文件,这些文件都可以连接到其他包中的其他 faces-config.xml 吗?谁能给我一个解决方案。示例代码会有所帮助。

4

1 回答 1

0

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

于 2010-03-28T10:44:29.590 回答