Jsf Can';找不到带@ManagedBean注释的bean
在将旧web应用程序的JSF版本从MyFaces 1.1升级到MyFaces 2.2.12的过程中,我试图直接在bean类中将Jsf Can';找不到带@ManagedBean注释的bean,jsf,jsf-2,managed-bean,faces-config,Jsf,Jsf 2,Managed Bean,Faces Config,在将旧web应用程序的JSF版本从MyFaces 1.1升级到MyFaces 2.2.12的过程中,我试图直接在bean类中将
文件中的条目替换为@ManagedBean
注释。我用它作为迁移的一般指南
例如,我正在替换以下内容
<managed-bean>
<managed-bean-name>MyBean</managed-bean-name>
<managed-bean-class>some.package.MyBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
根据,注释被faces config.xml
中的相应条目覆盖,因此我删除了faces config.xml
中的
元素
由于该项目由几个maven模块组成,这些模块在作为组合war文件部署之前分别打包为JAR,因此我也尝试按照来自的建议,在下面的位置向包含bean的子模块添加另一个META-INF
文件夹,其中包含faces config.xml
(关于中接受的答案):
内容如下:
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
因为我使用JSF进行bean管理,所以我遵循了中的JSF部分说明,但即使在验证了其中提到的各个点之后,我仍然会得到相同的错误
我使用Tomcat7作为servlet容器,根据,它支持servlet规范到3.0版本,反过来,它应该满足JSF2.2的要求,如果我理解正确的话,根据,它至少需要ServletSpec2.5
我已经搜索了很多问题的原因(如上所述,我尝试了上面提到的几篇文章),但仍然无法解决问题。如果有任何帮助,我将不胜感激!答案可以在@ManagedBean
Javadoc中找到:
ManagedBean.name
属性的值被视为托管bean名称
。如果name属性的值未指定或是空的字符串
,则托管bean名称
是从获取完全限定类名的非限定类名部分并转换第一个小写字符。例如,如果ManagedBean
注释位于具有完全限定类名com.foo.Bean
的类上,并且注释上没有name属性,则ManagedBean name
将被视为Bean
。此注释所属类的完全限定类名附加的是托管bean类
因此,您的bean被命名为myBean
,而不是myBean
。如果您希望它是myBean
,请提供带有注释的名称:@ManagedBean(name=“myBean”)
答案可以在@ManagedBean
Javadoc中找到:
ManagedBean.name
属性的值被视为托管bean名称
。如果name属性的值未指定或是空的字符串
,则托管bean名称
是从获取完全限定类名的非限定类名部分并转换第一个小写字符。例如,如果ManagedBean
注释位于具有完全限定类名com.foo.Bean
的类上,并且注释上没有name属性,则ManagedBean name
将被视为Bean
。此注释所属类的完全限定类名附加的是托管bean类
因此,您的bean被命名为myBean
,而不是myBean
。如果您希望它是myBean
,请提供带有注释的名称:@ManagedBean(name=“myBean”)
非常感谢您的回答!不幸的是,我已经尝试通过使用(name=“myBean”)设置名称来解决这个问题
(然后再试一次),但我仍然得到相同的错误:javax.el.PropertyNotFoundException:Target unreable,标识符'MyBean'解析为null
我在这里发疯了。我尝试将META-INF文件夹和包含的faces config.xml
放入每个可以想象的位置,但错误仍然相同。非常感谢您的回答!Unf有趣的是,我已经尝试通过使用(name=“MyBean”)
设置名称来解决这个问题(然后再试一次),但我仍然得到相同的错误:javax.el.PropertyNotFoundException:Target Unreachable,标识符'MyBean'解析为null
我在这里发疯了。我已经尝试将META-INF文件夹和包含的faces config.xml
放入每个可以想象的位置,但错误仍然是一样的。小建议:使用JSF 2.3,t他@ManagedBean
注释被反对使用CDI@Named
。现在不是直接切换到该注释而不是@ManagedBean的正确时机吗?@Kukeltje感谢您的建议。我曾考虑升级到CDI和@Named
注释,但遇到了许多其他问题。但也许您是对的我和t应该尝试解决这些问题,而不是让一些很快就会被弃用的东西发挥作用。小建议:在JSF 2.3中,@ManagedBean
注释被弃用,而使用名为
的CDI@注释。现在不是直接切换到它而不是@ManagedBean的时候吗?@Kukeltje感谢e建议。我考虑升级到CDI和名为
的注释,但遇到了许多其他问题。但也许你是对的,我应该尝试解决这些问题,而不是让一些很快就会被弃用的东西发挥作用。
MainProject
| SubModule
| |src
| | main
| | resources
| | META-INF
| | faces-config.xml
<faces-config
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
version="2.2">
</faces-config>
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'MyBean' resolved to null