目标无法到达,标识符解析为空
Target Unreachable, identifier resolved to null
我在使用 JSF 2.2 中的一个简单 Web 应用程序时遇到问题,我的托管 bean 没有解决,我得到了这个错误:
/greeting.xhtml @21,66 date="#{dukesBDay.yourBD}": Target Unreachable, identifier 'dukesBDay' resolved to null
这是我的托管 bean:
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class DukesBDay {
@EJB
private DukesBirthDayBean dukesBirthdayBean;
这是我的 greeting.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"
xmlns:fc="http://java.sun.com/jsf/composite/components">
<h:head>
<title>First Cup Greeting Page</title>
</h:head>
<h:form>
<h2>
<h:outputText value="#{bundle.Welcome}"/>
</h2>
<h:outputText value="#{bundle.DukeIs} "/>
<h:outputText value="#{dukesBDay.age} #{bundle.YearsOldToday}"/>
<p/>
<h:outputText value="#{bundle.Instructions}"/>
<p/>
<h:outputText value="#{bundle.YourBD} "/>
<fc:inputDate id="userBirthday" date="#{dukesBDay.yourBD}" />
<h:outputText value=" #{bundle.Pattern}"/>
<p/>
<h:commandButton value="#{bundle.Submit}"
action="#{dukesBDay.processBirthday}"/>
<p/>
<h:message for="userBirthday" style="color:red"/>
</h:form>
这是我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>greeting.xhtml</welcome-file>
</welcome-file-list>
</web-app>
我尝试将名称 属性 添加到 @ManagedBean:
package firstcup.web;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="dukesBDay")
@SessionScoped
public class DukesBDay {
但是还是不行,还是一样的错误
我尝试在我的 faces-config 中映射托管 bean:
<managed-bean>
<managed-bean-name>dukesBDay</managed-bean-name>
<managed-bean-class>firstcup.web.DukesBDay</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
但是我得到这个错误:
Unable to create managed bean dukesBDay. The following problems were found: - Bean or property class firstcup.web.DukesBDay for managed bean dukesBDay cannot be found
为什么我的DukesBDay没有解决?怎么了?
谢谢
当您编写@ManagedBean 时,您还应该在其中添加名称属性。
@ManagedBean(name="dukesBDay")
@sessionscoped
声明托管 bean 的另一种方法是使用 faceconfig.xml 文件。
<managed-bean>
<managed-bean-name>dukesBDay</managed-bean-name>
<managed-bean-class>package.DukesBDay</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
如果不指定 dukesBDay 和@ManagedBean,它将被解析为 null。
我解决了重新启动 NetBeans 和 GlassFish Server 的问题。
我没有将名称 属性 添加到 @ManagedBean:
package firstcup.web;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class DukesBDay {
一切正常,所以没有必要(根据命名约定,您可以使用 Class 的未大写的短名称来引用 bean)
答案中: @Named
标签没有显示,但对我来说只插入 @ManagedBean
标签就解决了问题
@Named(value = "DukesBDay")
@ManagedBean
@SessionScoped
public class DukesBDay implements Serializable {
@EJB
private DukesBirthdayBean dukesBirthdayBean;
protected int age;
//@NotNull (In my case I'm using Glassfish 5)
protected Date yourBD;
...
通过这种方式,您无需更改另一个代码中的名称。
我在使用 JSF 2.2 中的一个简单 Web 应用程序时遇到问题,我的托管 bean 没有解决,我得到了这个错误:
/greeting.xhtml @21,66 date="#{dukesBDay.yourBD}": Target Unreachable, identifier 'dukesBDay' resolved to null
这是我的托管 bean:
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class DukesBDay {
@EJB
private DukesBirthDayBean dukesBirthdayBean;
这是我的 greeting.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"
xmlns:fc="http://java.sun.com/jsf/composite/components">
<h:head>
<title>First Cup Greeting Page</title>
</h:head>
<h:form>
<h2>
<h:outputText value="#{bundle.Welcome}"/>
</h2>
<h:outputText value="#{bundle.DukeIs} "/>
<h:outputText value="#{dukesBDay.age} #{bundle.YearsOldToday}"/>
<p/>
<h:outputText value="#{bundle.Instructions}"/>
<p/>
<h:outputText value="#{bundle.YourBD} "/>
<fc:inputDate id="userBirthday" date="#{dukesBDay.yourBD}" />
<h:outputText value=" #{bundle.Pattern}"/>
<p/>
<h:commandButton value="#{bundle.Submit}"
action="#{dukesBDay.processBirthday}"/>
<p/>
<h:message for="userBirthday" style="color:red"/>
</h:form>
这是我的 web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>greeting.xhtml</welcome-file>
</welcome-file-list>
</web-app>
我尝试将名称 属性 添加到 @ManagedBean:
package firstcup.web;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="dukesBDay")
@SessionScoped
public class DukesBDay {
但是还是不行,还是一样的错误
我尝试在我的 faces-config 中映射托管 bean:
<managed-bean>
<managed-bean-name>dukesBDay</managed-bean-name>
<managed-bean-class>firstcup.web.DukesBDay</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
但是我得到这个错误:
Unable to create managed bean dukesBDay. The following problems were found: - Bean or property class firstcup.web.DukesBDay for managed bean dukesBDay cannot be found
为什么我的DukesBDay没有解决?怎么了?
谢谢
当您编写@ManagedBean 时,您还应该在其中添加名称属性。
@ManagedBean(name="dukesBDay")
@sessionscoped
声明托管 bean 的另一种方法是使用 faceconfig.xml 文件。
<managed-bean>
<managed-bean-name>dukesBDay</managed-bean-name>
<managed-bean-class>package.DukesBDay</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
如果不指定 dukesBDay 和@ManagedBean,它将被解析为 null。
我解决了重新启动 NetBeans 和 GlassFish Server 的问题。
我没有将名称 属性 添加到 @ManagedBean:
package firstcup.web;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class DukesBDay {
一切正常,所以没有必要(根据命名约定,您可以使用 Class 的未大写的短名称来引用 bean)
答案中:@Named
标签没有显示,但对我来说只插入 @ManagedBean
标签就解决了问题
@Named(value = "DukesBDay")
@ManagedBean
@SessionScoped
public class DukesBDay implements Serializable {
@EJB
private DukesBirthdayBean dukesBirthdayBean;
protected int age;
//@NotNull (In my case I'm using Glassfish 5)
protected Date yourBD;
...
通过这种方式,您无需更改另一个代码中的名称。