Ich habe ein einfaches Programm in Java-Webformularen geschrieben, erhalte jedoch die folgende Fehlermeldung:
WELD-000072 Managed Bean, das einen Passivierungsbereich deklariert, muss passivierungsfähig sein. Bean: Managed Bean [Klasse
BeanPakage.DemoBeans
] mit Qualifikationsmerkmalen [@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;
}
}
Sie können Ihre Bean-Passivierung durch die Implementierung der serialisierbaren Schnittstelle ermöglichen:
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.
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 alle @Interceptors auch erreichbar sind:
@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
...
}
Es muss serialisierbar sein.
Siehe diese Antwort.
https://community.jboss.org/thread/179828
Am besten, Anders
Machen Sie DemoBeans
serialized
@Named("DemoBeans")
@SessionScoped
public class DemoBeans implements Serializable
{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Sie können das Passivierungsverhalten Ihrer Bean auch mit der Annotation aktivieren:
@Stateful (passivationCapable = true)
In diesem Fall müssen Sie keine serialisierbare Schnittstelle implementieren.
Grüße . Jorge
Überprüfen Sie die Importe
(einige Male verwendeten Netbeans andere aus anderen Bibliotheken)
Beispiel. import javax.faces.view.ViewScoped; Ändern Sie es durch Importieren von javax.faces.bean.ViewScoped.
Ursache: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean, das 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 sie nur deutlicher 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();
}
}
}