Jsf bean上注入managedProperty的NullPointerException

Jsf bean上注入managedProperty的NullPointerException,jsf,nullpointerexception,managed-property,Jsf,Nullpointerexception,Managed Property,环境: 野蝇22 爪哇11 JSF2.3 我试图在bean中注入ManagedProperty,得到了一个NullPointerExcepion,但我不知道确切的原因。少了什么 错误日志 21:35:25,994 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-8) Error Rendering View[/index.xhtml]: java.lang.NullPointerExc

环境:

  • 野蝇22
  • 爪哇11
  • JSF2.3
我试图在bean中注入ManagedProperty,得到了一个NullPointerExcepion,但我不知道确切的原因。少了什么

错误日志

21:35:25,994 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-8) Error Rendering View[/index.xhtml]: java.lang.NullPointerException
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.ManagedPropertyProducer.evaluateExpressionGet(ManagedPropertyProducer.java:87)
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.ManagedPropertyProducer.lambda$new$0(ManagedPropertyProducer.java:60)
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.CdiProducer.create(CdiProducer.java:105)
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.ManagedPropertyProducer.create(ManagedPropertyProducer.java:38)
    at org.jboss.weld.core@3.1.5.Final//org.jboss.weld.contexts.unbound.DependentContextImpl.get(DependentContextImpl.java:64)
    ...

21:35:26,001 ERROR [io.undertow.request] (default task-8) UT005023: Exception handling request to /roscam/index.xhtml: javax.servlet.ServletException
    at javax.faces.api@3.0.0.SP04//javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:725)
    at javax.faces.api@3.0.0.SP04//javax.faces.webapp.FacesServlet.service(FacesServlet.java:451)
    at io.undertow.servlet@2.2.4.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
    ...
Caused by: java.lang.NullPointerException
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.ManagedPropertyProducer.evaluateExpressionGet(ManagedPropertyProducer.java:87)
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.ManagedPropertyProducer.lambda$new$0(ManagedPropertyProducer.java:60)
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.CdiProducer.create(CdiProducer.java:105)
    at com.sun.jsf-impl@2.3.14.SP02//com.sun.faces.cdi.ManagedPropertyProducer.create(ManagedPropertyProducer.java:38)
    ...
    ... 57 more
SessionBean

@Named
@SessionScoped
public class SessionBean implements Serializable {
    ...
    @Inject
    @ManagedProperty(value = "#{localeBean}")
    private LocaleBean localeB;//Error injecting bean NullPointerException
    ...
    @PostConstruct
    public void init() {
    ...
@Named
@SessionScoped
public class LocaleBean implements Serializable {

   @PostConstruct
   public void init() {
...
LocaleBean

@Named
@SessionScoped
public class SessionBean implements Serializable {
    ...
    @Inject
    @ManagedProperty(value = "#{localeBean}")
    private LocaleBean localeB;//Error injecting bean NullPointerException
    ...
    @PostConstruct
    public void init() {
    ...
@Named
@SessionScoped
public class LocaleBean implements Serializable {

   @PostConstruct
   public void init() {
...
index.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>

<h:body>
    <f:view locale="#{localeBean.locale}">
       hi there
        #{sessionBean.doNothing}
    </f:view>
</h:body>

</html>
...
<dependencies>
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>8.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>10.0.0</version>
    </dependency>
    ...

你好
#{sessionBean.doNothing}
pom.xml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>

<h:body>
    <f:view locale="#{localeBean.locale}">
       hi there
        #{sessionBean.doNothing}
    </f:view>
</h:body>

</html>
...
<dependencies>
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>8.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>10.0.0</version>
    </dependency>
    ...
。。。
雅加达平台
jakarta.jakartaee-api
8.0.0
假如
org.primefaces
素面
10.0.0
...

难道不可能简单地注入一个没有@ManagedProperty的LocaleBean吗?

运行时没有任何问题

  • 月食4.18
  • 采用JDK 11.0.5
  • WildFly 22.0.0.Final(非预览版)
  • 莫哈拉2.3.14.SP02
这里

但删除
@ManagedProperty(value=“#{localeBean}”)
注释

所以

package foo.bar;
导入java.io.Serializable;
导入javax.enterprise.context.SessionScoped;
导入javax.inject.Named;
@会议范围
@命名
公共类LocaleBean实现可序列化{
私有静态最终长serialVersionUID=7584442178216104053L;
私有字符串区域设置;
公共字符串getLocale(){
返回区域设置;
}
}
package foo.bar;
导入java.io.Serializable;
导入javax.enterprise.context.SessionScoped;
导入javax.inject.inject;
导入javax.inject.Named;
@命名
@会议范围
公共类SessionBean实现了可序列化{
私有静态最终长serialVersionUID=-6657315612830810889L;
@注入
私有localebeanlocaleb;
私有字符串doNothing=“foobar”;
公共字符串getDoNothing(){
什么都不做;
}
}
工作完美

对于这个测试,你根本不需要Maven的东西

如果出现其他错误,请尝试不使用Primefaces

而且应该是


如果你得到一个

org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean Managed Bean [class LocaleBean] with qualifiers [@Default @Any @Named] with class class LocaleBean
...
java.lang.ClassFormatError: Illegal class name "/LocaleBean$Proxy$_$$_WeldClientProxy" in class file /LocaleBean$Proxy$_$$_WeldClientProxy
错误,然后必须将bean类放入包:。固定在焊缝3.1.7中。最终。WildFly 22.0.0.最终包含焊缝3.1.5.最终,WildFly 23.0.0.最终包含焊缝3.1.6.最终


另请参见。

从jakartaee 8开始,ManagedProperty已被弃用,正如我们在其


因此,不需要日志记录器将@ManagedProperty与@Injection一起使用。

我正在从以前版本的javaee迁移,现在ManagedProperty似乎已被弃用,正如api中显示的一样。看起来ManagedProperty在jakartaee 8中已被弃用。我在以前的版本中使用过它们,所以这就是maven代码片段的原因,我从以前的javaee版本迁移到现在的ManagedProperty,正如api中显示的那样,这个答案是不正确的。代码没有使用不推荐的
javax.faces.bean.ManagedProperty
。根据问题中的堆栈跟踪,它实际上使用了
javax.faces.annotation.ManagedProperty
,这并不是不推荐的。你说得对!我认为这就是问题所在,因为它通过去掉@ManagedProperty起作用。所以仍然不知道它为什么抛出NullPointerException。。。