我有一个使用一些库来重用一些常见内容的ear包。其中一个常见的事情是SettingsBean,它为应用程序执行一些通用设置。但是,即使存在beans.xml文件,也无法使用CDI找到SettingsBean。
以下是我的EAR文件的文件结构:
<item name="android:actionBarStyle">@style/ActionBar.Solid.Example</item>
SettingsBean:
META-INF
lib
main-ejb.jar
main-web.war
|
`-- WEB-INF
| |
| `-- lib
| | |
| | `-- primefaces.jar
| | common-web.jar
| | |
| | `-- META-INF
| | | |
| | | `-- resources
| | | | |
| | | | `-- WEB-INF
| | | | |
| | | | `-- mainTemplate.xhtml
| | | `-- maven
| | | `-- MANIFEST.MF
| | | `-- beans.xml
| | `-- com
| | |
| | `-- SettingsBean.class
| `-- classes
| `-- web.xml
| `-- glassfish-web.xml
| `-- faces-config.xml
| `-- beans.xml
`-- META-INF
`-- index.xhtml
的index.xhtml:
@Named(value = "settingsBean")
@SessionScoped
public class SettingsBean implements Serializable {
//Code here
}
在<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/mainTemplate.xhtml">
<ui:define name="content">
Content comes here
</ui:define>
</ui:composition>
我调用了settingsBean。因此,当我调用index.xhtml页面时,出现以下错误:
mainTemplates.xhtml
有关如何访问库jar中的命名bean的任何帮助?到目前为止我所读到的是你需要在其中包含beans.xml文件,否则CDI将不会扫描jar中的Named bean,但正如你所看到的,我有beans.xml。
答案 0 :(得分:0)
这不是OP的问题(考虑到文件的发布树),但是由于其他问题,对于具有相同错误消息的其他人可能会有帮助。
当在 bean发现期间无法识别bean时,会发生这种错误。未被发现的一个可能原因是,如果未将JAR标记为具有bean,在这种情况下将不会对其进行扫描。解决方案是确保在WEB-INF下的WAR文件和META-INF下的JAR文件中都有bean.xml的副本。
请参见reference 1下的reference 2和here。