Java EE 6:目标无法访问,标识符'helloBean'已解析为null [英] Java EE 6: Target Unreachable, identifier 'helloBean' resolved to null

查看:99
本文介绍了Java EE 6:目标无法访问,标识符'helloBean'已解析为null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用一个简单的JSF 2教程示例。

I am trying to get a simple JSF 2 tutorial example to work.

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

I am using the dynamic web project in Eclipse and publishing to a Glassfish 3 server (run -> run on server). The first index.xhtml page loads correctly, but when I have to access a managed bean, the following error displays:

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

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

I've had a look at the various other discussions on this topic, however the solutions never seem to work for me (e.g. adding beans.xml, giving the managed bean a name etc, following naming conventions).

任何帮助都将不胜感激。

Any help would be appreciated.

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

Here is the code I am currently working with:

Index.xhtml

Index.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"      
      xmlns:h="http://java.sun.com/jsf/html">

    <h:head>
        <title>JSF 2.0 Hello World</title>
    </h:head>
    <h:body>
        <h3>JSF 2.0 Hello World Example - hello.xhtml</h3>
        <h:form>
           <h:inputText value="#{helloBean.name}"></h:inputText>
           <h:commandButton value="Welcome Me" action="response"></h:commandButton>
        </h:form>
    </h:body>
</html>

response.xhtml:

response.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"    
      xmlns:h="http://java.sun.com/jsf/html">

    <h:head>
        <title>JSF 2.0 Hello World</title>
    </h:head>
    <h:body bgcolor="white">
        <h3>JSF 2.0 Hello World Example - welcome.xhtml</h3>
        <h4>Welcome #{helloBean.name}</h4>
    </h:body>
</html>

管理豆:

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:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5">

  <display-name>JavaServerFaces</display-name>

  <!-- Change to "Production" when you are ready to deploy -->
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>

  <!-- Welcome page -->
  <welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
  </welcome-file-list>

  <!-- JSF mapping -->
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- Map these files with JSF -->
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

</web-app>


推荐答案

您需要符合JSF 2.0 /WEB-INF/faces-config.xml 文件,以便让JSF解释注释。

You need to have a JSF 2.0 compliant /WEB-INF/faces-config.xml file in order to get JSF to interpret the annotations.

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <!-- Config here. Can even be kept empty. -->

</faces-config>

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

If you already have one or if that doesn't solve the problem, please pay attention to server startup logs if you don't see any warnings/errors.

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

By the way, your /WEB-INF/web.xml file is declared conform Servlet 2.5 specification. While this may not necessarily harm, it makes no sense if you're using a Servlet 3.0 compliant container. Update the root declaration as follows:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0">

    <!-- Config here. -->

</web-app>

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

The /WEB-INF/beans.xml is intented for CDI annotations like @Named, @Inject and so on. Just a completely empty file is sufficient to turn it on. It has totally no relationship to JSF annotations like @ManagedBean, @ManagedProperty and so on. It should also not be confused/mixed with each other.

这篇关于Java EE 6:目标无法访问,标识符'helloBean'已解析为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆