WELD-000072 Zarządzana fasola deklarująca zakres pasywacji musi mieć zdolność pasywacji

89

Napisałem prosty program w formularzach internetowych java, ale otrzymuję następujący błąd:

WELD-000072 Zarządzana fasola deklarująca zakres pasywacji musi mieć zdolność pasywacji. Bean: Managed Bean [klasa BeanPakage.DemoBeans] z kwalifikatorami [ @Any @Default @Named]

Czy ktoś może mi powiedzieć, skąd bierze się ten błąd?

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;
    }
}
Christina
źródło

Odpowiedzi:

174

Możesz włączyć pasywację fasoli, implementując interfejs Serializable:

public class DemoBean implements Serializable { ... }

Należy pamiętać, że istnieje więcej wymagań dotyczących zdolności do pasywacji. Więcej informacji można znaleźć w dokumentacji spawania.

Matt Handy
źródło
20

Błąd może pozostać, mimo że komponent bean CDI można serializować:

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

Przykładowe zajęcia:

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

Upewnij się, że wszystkie @Interceptory są również możliwe do zajęcia:

@Interceptor
@Transactional
public class TransactionInterceptor implements Serializable {
    ...
}
Tim
źródło
Dzięki, serializowalność @Interceptorsbyła dla mnie problemem!
Anthony O.
5

Zrób DemoBeans serializację

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

    private String name;

    public String getName() {
        return name;
    }

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

}
Mohd Kose Avase
źródło
2

Możesz również aktywować zachowanie pasywacji swojego ziarna za pomocą adnotacji:

@Stateful (passivationCapable = true)

W tym przypadku nie musisz implementować interfejsu Serializable.

Pozdrowienia. Jorge

Jorge Torres
źródło
1

Zweryfikuj import

(czasami netbeans używał innych z innych bibliotek)

Przykład. import javax.faces.view.ViewScoped; zmień go, importując javax.faces.bean.ViewScoped;

Fabian Pisani
źródło
W rzeczywistości JSF 2.3 wycofuje się javax.faces.bean.ViewScopedna korzyść javax.faces.view.ViewScoped. Czy to oznacza, że ​​muszę przejść przez wszystkie elementy bean z zakresem widoku i umożliwić ich serializację? Z 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

Spowodowany przez: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean deklarujący pasywujący zakres musi mieć zdolność pasywacji. Bean: Managed Bean [klasa com.marcos.controller.PersonaBean] z kwalifikatorami [@Default @Named @Any]


Rozwiązałem to, najwyraźniej CDI, nie rozpoznałem fasoli, po prostu uściśliłem to

@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();
    }
  }
}
Marcos Chacaliaza Altamirano
źródło