Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf Can';找不到带@ManagedBean注释的bean_Jsf_Jsf 2_Managed Bean_Faces Config - Fatal编程技术网

Jsf Can';找不到带@ManagedBean注释的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类中将

在将旧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