2012-03-18 11 views
60

Napisałem prosty program w Javie formularzy internetowych, ale otrzymuję następujący błąd:Błąd Java: WELD-000072 Zarządzane fasola deklarowania pasywacji zakres musi być pasywacja zdolny

WELD-000072 Managed bean declaring a passivating scope must be passivation capable. Bean: Managed Bean [class BeanPakage.DemoBeans] with qualifiers [@Any @Default @Named]

może ktoś mi powiedzieć, gdzie ten błąd pochodzi z?

mojego kodu jest:

package BeanPakage; 

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; 
    } 




} 

Odpowiedz

121

Można dokonać fasola pasywacja zdolny poprzez wdrożenie Serializable interfejs:

public class DemoBean implements Serializable { ... } 

pamiętać, że istnieją dalsze wymagania dotyczące bycia pasywacja zdolny. Więcej informacji można znaleźć w dokumentacji Weld.

19

Błąd może pozostać choć fasola CDI jest serializacji:

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

Przykład klasy:

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

Upewnij się, że wszystkie @Interceptors są seializable także:

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

Wielkie dzięki. Zmaganie się z tym przez 1 godzinę ... –

+0

Dzięki, serializowalne '@ Interceptors' było problemem dla mnie! –

5

Marka DemoBeansodcinkach

@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

Można również aktywować swojego zachowania pasywacji fasoli z adnotacją:

@Stateful (passivationCapable = true)

W tym przypadku nie trzeba zaimplementować interfejs Serializable .

Pozdrawiam. Jorge

0

Sprawdź import

(kilka razy NetBeans używane inne od innych bibliotek)

Przykład. import javax.faces.view.ViewScoped; zmień go za pomocą importu javax.faces.bean.ViewScoped;

0

Spowodowane przez: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Fasola deklarująca zakres pasywujący musi być zdolna do pasywacji. Bean: Managed Bean [klasa com.marcos.controller.PersonaBean] z kwalifikatorów [@Default @Named @Any]


Rozwiązałem go, najwyraźniej CDI, nie rozpoznaje fasolkę, po prostu staje się on bardziej wyraźny

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

    try { 
     service.registrar(null); 

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

rozwiązanie dla mnie :

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

    try { 
     service.registrar(null); 

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