Java EE 6:目标无法访问,标识符’helloBean’已解析为null

我想尝试一个简单的JSF 2教程示例。

我在Eclipse中使用动态Web项目并发布到Glassfish 3服务器(运行 – >在服务器上运行)。 第一个index.xhtml页面正确加载,但是当我必须访问托管bean时,会显示以下错误:

/index.xhtml @14,48 value="#{helloBean.name}": Target Unreachable, identifier 'helloBean' resolved to null 

我已经看过关于这个主题的各种其他讨论,但是解决方案对我来说似乎永远不会起作用(例如,添加beans.xml,根据命名约定给托管bean命名等)。

任何帮助,将不胜感激。

这是我目前正在使用的代码:

的index.xhtml

     JSF 2.0 Hello World   

JSF 2.0 Hello World Example - hello.xhtml

response.xhtml:

     JSF 2.0 Hello World   

JSF 2.0 Hello World Example - welcome.xhtml

Welcome #{helloBean.name}

管理豆:

 package java.hello1; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import java.io.Serializable; @ManagedBean @SessionScoped public class HelloBean implements Serializable { private static final long serialVersionUID = 1L; private String name = "Ricardo"; public String getName() { return name; } public void setName(String name) { this.name = name; } } 

web.xml中:

   JavaServerFaces   javax.faces.PROJECT_STAGE Development    faces/index.xhtml    Faces Servlet javax.faces.webapp.FacesServlet 1    Faces Servlet /faces/*   Faces Servlet *.jsf   Faces Servlet *.faces   Faces Servlet *.xhtml   

您需要具有符合JSF 2.0的/WEB-INF/faces-config.xml文件才能让JSF解释注释。

     

如果您已经有一个或如果没有解决问题,请注意服务器启动日志,如果您没有看到任何警告/错误。

顺便说一句,您的/WEB-INF/web.xml文件被声明为符合Servlet 2.5规范。 虽然这可能不一定有害,但是如果您使用符合Servlet 3.0的容器则毫无意义。 更新根声明如下:

     

/WEB-INF/beans.xml用于CDI注释,如@ @Named ,@ @Inject等。 只需一个完全空的文件即可将其打开。 它与@ @ManagedBean ,@ @ManagedProperty等JSF注释完全没有关系。 它也不应该相互混淆/混合。

我已经被困了这个问题半天了。 我的问题只有在我从Eclipse运行WebApp时才出现。 JSF 2在WEB-INF / classes中查找带注释的bean,但找不到它们。 为了解决这个问题,我将构建输出路径更改为WebContent / WEB-INF / classes。 下面是类似案例的详细解释: Jetty maven目标jetty:run不能与JSF 2.0 @ManagedBean一起使用

在与OP完全相同的场景中(使用eclipse,使用run – >在服务器上运行发布到Glassfish 3服务器)我得到完全相同的错误,直到从Eclipse项目名称中删除空格。 简单地删除任何空格解决了问题。

请检查您的war文件,看看您的类是否在WEB-INF / classes文件夹下。 我遇到了同样的问题,发现没有类文件WEB-INF / classes文件夹。

我有同样的问题,我尝试了一切。 之后,我只需点击“Click and Build Project”按钮,“Build Project”按钮并重新启动GlassFish服务器。 之后,它适用于我,现在:)

在Controller / Bean中包含@Named ..