WELD-000072 Managed bean khai báo một phạm vi phân hóa phải có khả năng thụ động


89

Tôi đã viết một chương trình đơn giản trong các biểu mẫu web java nhưng tôi gặp lỗi sau:

WELD-000072 Managed bean khai báo một phạm vi chuyển hóa phải có khả năng thụ động hóa. Bean: Managed Bean [lớp BeanPakage.DemoBeans] với các vòng loại [ @Any @Default @Named]

Có ai có thể cho tôi biết lỗi này xuất phát từ đâu không?

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

Câu trả lời:


174

Bạn có thể làm cho khả năng thụ động bean của mình bằng cách triển khai giao diện Serializable:

public class DemoBean implements Serializable { ... }

Lưu ý rằng có nhiều yêu cầu hơn để có khả năng thụ động. Tham khảo tài liệu Weld để biết thêm thông tin.


20

Lỗi có thể vẫn còn mặc dù bean CDI có thể tuần tự hóa:

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

Lớp mẫu:

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

Đảm bảo rằng tất cả các @Interceptors cũng có thể seializiz:

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

Cảm ơn, serializable @Interceptorslà vấn đề đối với tôi!
Anthony O.


5

Hãy DemoBeans đăng

@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

Bạn cũng có thể kích hoạt hành vi thụ động của bean của mình bằng chú thích:

@Stateful (passivationCapable = true)

Trong trường hợp này, bạn không cần triển khai giao diện Serializable.

Trân trọng. Jorge


1

Xác minh nhập khẩu

(một số lần netbeans đã sử dụng những cái khác từ các thư viện khác)

Thí dụ. nhập javax.faces.view.ViewScoped; thay đổi nó bằng cách import javax.faces.bean.ViewScoped;


Trên thực tế JSF 2.3 deprecates javax.faces.bean.ViewScopedủng hộ để javax.faces.view.ViewScoped. Điều này có nghĩa là tôi phải xem qua tất cả các hạt trong phạm vi chế độ xem của mình và làm cho chúng có thể được tuần tự hóa? Từ 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

Gây ra bởi: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean khai báo một phạm vi chuyển động phải có khả năng thụ động. Bean: Managed Bean [class com.marcos.controller.PersonaBean] với các vòng loại [@Default @Named @Any]


Tôi đã giải quyết nó, rõ ràng là CDI, tôi không nhận ra bean, tôi chỉ làm cho nó rõ ràng hơn

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

    try {
        service.registrar(null);

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

giải pháp cho tôi:

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

    try {
        service.registrar(null);

    }catch (Exception e) {
        e.printStackTrace();
    }
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.