WELD-000072 Kacang yang dikelola yang menyatakan ruang lingkup pasif harus mampu pasif


90

Saya menulis program sederhana dalam bentuk web java tetapi saya menerima kesalahan berikut:

WELD-000072 Kacang yang dikelola yang menyatakan ruang lingkup pasif harus mampu pasif. Bean: Bean Terkelola [kelas BeanPakage.DemoBeans] dengan kualifikasi [ @Any @Default @Named]

Adakah yang bisa memberi tahu saya dari mana kesalahan ini berasal?

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

Jawaban:


175

Anda dapat membuat passivasi kacang Anda mampu dengan mengimplementasikan antarmuka Serializable:

public class DemoBean implements Serializable { ... }

Perhatikan bahwa ada lebih banyak persyaratan untuk kemampuan pasif. Lihat dokumentasi Weld untuk informasi lebih lanjut.


21

Kesalahan mungkin tetap ada meskipun kacang CDI dapat diserialkan:

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

Contoh kelas:

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

Pastikan semua @Interceptors juga dapat disegel:

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

Terima kasih, @Interceptorsmasalah serializable adalah masalah saya!
Anthony O.


6

Buat DemoBeans serial

@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

Anda juga dapat mengaktifkan perilaku pasif kacang Anda dengan anotasi:

@Stateful (pasvationCapable = true)

Dalam hal ini Anda tidak perlu mengimplementasikan antarmuka yang dapat diserialisasi.

Salam. Jorge


1

Verifikasi impor

(beberapa kali netbeans menggunakan yang lain dari perpustakaan lain)

Contoh. impor javax.faces.view.ViewScoped; ubah dengan import javax.faces.bean.ViewScoped;


Sebenarnya JSF 2.3 tidak lagi javax.faces.bean.ViewScopedmendukung javax.faces.view.ViewScoped. Apakah ini berarti saya harus memeriksa semua kacang cakupan tampilan saya dan membuatnya dapat diserialkan? Dari 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

Disebabkan oleh: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean yang mendeklarasikan cakupan pasif harus mampu pasif. Bean: Bean Terkelola [class com.marcos.controller.PersonaBean] dengan qualifier [@Default @Named @Any]


Saya selesaikan, ternyata CDI, saya tidak mengenali kacang, saya hanya membuatnya lebih eksplisit

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

    try {
        service.registrar(null);

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

solusi untuk saya:

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

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.