2012-03-18 21 views
60

Tôi đã viết một chương trình đơn giản trong các hình thức web java nhưng tôi đang nhận được lỗi sau:Java Lỗi: HÀN-000.072 Managed đậu tuyên bố một phạm vi passivating phải thụ động có khả năng

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

bất cứ ai có thể cho tôi biết nơi lỗi này đến từ?

mã của tôi là:

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




} 

Trả lời

121

Bạn có thể làm thụ động hóa đậu của bạn có khả năng bằng cách thực hiện các giao diện Serializable:

public class DemoBean implements Serializable { ... } 

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

19

Các lỗi có thể vẫn còn mặc dù đậu CDI là serializable:

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

lớp Ví dụ:

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

Hãy chắc chắn rằng tất cả @Interceptors là seializable cũng như:

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

Cảm ơn rất nhiều người. Đấu tranh với điều này trong 1 giờ ... –

+0

Cảm ơn, serializable '@ Interceptors' là vấn đề đối với tôi! –

5

Tạo DemoBeansserialized

@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 hóa của đậu của bạn với chú thích:

@Stateful (passivationCapable = true)

Trong trường hợp này bạn không cần phải thực hiện giao diện Serializable .

Trân trọng. Jorge

0

Xác nhận nhập khẩu

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

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

0

Gây ra bởi: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Bean tuyên bố phạm vi thụ động phải là khả năng thụ động. Bean: Managed Bean [class com.marcos.controller.PersonaBean] với vòng loại [@Default @Named @Any]


Tôi giải quyết nó, rõ ràng CDI, tôi đã không nhận ra đậu, 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 đối với 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(); 
    } 
    } 
}