WELD-000072 Verwaltete Bean, die einen passivierenden Bereich deklariert, muss passivierungsfähig sein


87

Ich habe ein einfaches Programm in Java-Webformularen geschrieben, erhalte aber den folgenden Fehler:

WELD-000072 Verwaltete Bean, die einen passivierenden Bereich deklariert, muss passivierungsfähig sein. Bean: Managed Bean [Klasse BeanPakage.DemoBeans] mit Qualifikanten [ @Any @Default @Named]

Kann mir jemand sagen, woher dieser Fehler kommt?

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;


@Named("DemoBeans")
@SessionScoped
public class DemoBeans {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Antworten:


171

Sie können Ihre Bean-Passivierung aktivieren, indem Sie die serialisierbare Schnittstelle implementieren:

public class DemoBean implements Serializable { ... }

Beachten Sie, dass es mehr Anforderungen gibt, um passivierungsfähig zu sein. Weitere Informationen finden Sie in der Schweißdokumentation.


20

Der Fehler bleibt möglicherweise bestehen, obwohl die CDI-Bean serialisierbar ist:

WELD-000072 Managed bean declaring a passivating scope must be passivation capable

Beispielklasse:

@Named
@ConversationScoped
public class TransactionMatchController implements Serializable {
    ...
}

Stellen Sie sicher, dass auch alle @Interceptors erkennbar sind:

@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
    ...
}

Danke, serialisierbar @Interceptorswar das Problem für mich!
Anthony O.


5

machen Sie DemoBeans serialisiert

@Named("DemoBeans")
@SessionScoped
public class DemoBeans  implements Serializable
{

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

2

Sie können das Passivierungsverhalten Ihrer Bean auch mit der Anmerkung aktivieren:

@Stateful (passivationCapable = true)

In diesem Fall müssen Sie keine serialisierbare Schnittstelle implementieren.

Grüße. Jorge


1

Überprüfen Sie die Importe

(Manchmal verwendeten Netbeans andere aus anderen Bibliotheken.)

Beispiel. import javax.faces.view.ViewScoped; Ändern Sie es durch Import javax.faces.bean.ViewScoped;


Tatsächlich wird JSF 2.3 javax.faces.bean.ViewScopedzugunsten von abgelehnt javax.faces.view.ViewScoped. Bedeutet dies, dass ich alle meine Bohnen mit Sichtbereich durchgehen und sie serialisierbar machen muss? Aus dem javax.faces.bean.ViewScopedJavadoc: @deprecated This has been replaced by {@code javax.faces.view.ViewScoped}. The functionality of this corresponding annotation is identical to this one, but it is implemented as a CDI custom scope.
Vasil Svetoslavov

0

Auslöser: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean, die einen passivierenden Bereich deklariert, muss passivierungsfähig sein. Bean: Managed Bean [Klasse com.marcos.controller.PersonaBean] mit Qualifikationsmerkmalen [@Default @Named @Any]


Ich habe es gelöst, anscheinend CDI, ich habe die Bohne nicht erkannt, ich habe es nur expliziter gemacht

@Named
@ViewScoped
public class PersonaBean  implements Serializable {
@Inject
private IPersonaService service;
public void registrar() {

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}

die lösung für mich:

@Named ("PersonaBean")
@ViewScoped
public class PersonaBean  implements Serializable {
@Inject
private IPersonaService service;
public void registrar() {

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.