【发布时间】:2017-10-23 06:59:18
【问题描述】:
在将旧 Web 应用程序的 JSF 版本从 MyFaces 1.1 升级到 MyFaces 2.2.12 时,我试图直接在 bean 类中用 @ManagedBean 注释替换我的 faces-config.xml 文件中的 <managed-bean> 条目。我使用Migrating from JSF 1.2 to JSF 2.0 作为迁移的一般指南。
例如,我正在替换类似
<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>
与
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class MyBean {
根据Are there going to be two instances for a bean if I write @managed bean annotation and define same in faces-config.xml,注释被faces-config.xml中的对应条目覆盖,所以我删除了faces-config.xml中的<managed-bean>元素。
由于该项目由几个 maven 模块组成,这些模块在部署为组合 war 文件之前单独打包为 jar,我还尝试遵循 How does JSF find beans annotated with @ManagedBean? 的建议,并添加了另一个包含 faces-config.xml 的 META-INF 文件夹到包含 bean 的子模块,位于以下位置(尊重How to reference JSF managed beans which are provided in a JAR file? 中接受的答案):
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>
遗憾的是,在尝试打开使用此特定 bean 的页面时,我仍然收到以下错误:
javax.el.PropertyNotFoundException: Target Unreachable, identifier 'MyBean' resolved to null
由于我使用 JSF 进行 bean 管理,因此我遵循了 Identifying and solving javax.el.PropertyNotFoundException: Target Unreachable 中说明的 JSF 部分,但即使在验证了其中提到的各个点之后,我仍然遇到相同的错误。
我正在使用 Tomcat 7 作为 servlet 容器,根据 http://tomcat.apache.org/whichversion.html,它支持最高版本 3.0 的 servlet 规范,反过来,对于 JSF 2.2 来说应该足够了,如果我理解正确的话,它至少需要 servlet规范 2.5,根据http://myfaces.apache.org/core22/。
我已经搜索了很多问题的原因(如前所述,我尝试了上面提到的几篇SO文章),但仍然无法解决问题。如果有任何帮助,我将不胜感激!
【问题讨论】:
-
小建议:在 JSF 2.3 中,
@ManagedBean注释已被弃用,取而代之的是使用 CDI@Named。现在不是直接切换到 @ManagedBean 的合适时机吗? -
@Kukeltje 感谢您的建议。我考虑升级到 CDI 和
@Named注释,但遇到了许多其他问题。但也许你是对的,我应该尝试解决这些问题,而不是让一些很快就会被弃用的工作。
标签: jsf jsf-2 managed-bean faces-config