WELD-000072 Pasifleştiren bir kapsam bildiren yönetilen fasulye pasifleştirmeye uygun olmalıdır


90

Java web formlarında basit bir program yazdım ancak şu hatayı alıyorum:

WELD-000072 Pasifleştiren bir kapsam bildiren yönetilen fasulye pasifleştirmeye uygun olmalıdır. Bean: Niteleyicilerle [ BeanPakage.DemoBeans] Yönetilen Bean [sınıfı @Any @Default @Named]

Biri bana bu hatanın nereden geldiğini söyleyebilir mi?

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

Yanıtlar:


175

Serileştirilebilir arabirimi uygulayarak fasulye pasifleştirmenizi sağlayabilirsiniz:

public class DemoBean implements Serializable { ... }

Pasivasyon kabiliyeti için daha fazla gereksinim olduğunu unutmayın. Daha fazla bilgi için Kaynak belgelerine bakın.


21

CDI bean serileştirilebilir olsa bile hata kalabilir:

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

Örnek sınıf:

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

Tüm @ Interceptor'ların da ele geçirilebilir olduğundan emin olun :

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

Teşekkürler, serileştirilebilir @Interceptorsbenim için sorun oldu!
Anthony O.


6

Make DemoBeans tefrika

@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

Ayrıca ek açıklamayla fasulyenizin pasifleştirme davranışını etkinleştirebilirsiniz:

@Stateful (passivationCapable = doğru)

Bu durumda Serializable arayüzü uygulamanıza gerek yoktur.

Saygılarımızla. Jorge


1

İçe aktarımları doğrulayın

(bazı zamanlar netbeans diğer kitaplıklardan başkalarını kullandı)

Misal. içe aktar javax.faces.view.ViewScoped; javax.faces.bean.ViewScoped içe aktararak değiştirin;


Aslında MTU 2.3 artık kullanılmayacağı javax.faces.bean.ViewScopediçin lehine javax.faces.view.ViewScoped. Bu, tüm bakış açımdan bakmam ve onları serileştirilebilir hale getirmem gerektiği anlamına mı geliyor? Gönderen 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

Sebep: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Pasifleştiren bir kapsamı bildiren Bean pasifleştirilebilir olmalıdır. Bean: Yönetilen Bean [sınıf com.marcos.controller.PersonaBean] niteleyicilerle [@Default @Named @Any]


Çözdüm, görünüşe göre CDI, fasulyeyi tanımadım, sadece daha açık hale getirdim

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

    try {
        service.registrar(null);

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

benim için çözüm:

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

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.