WELD-000072 声明钝化作用域的受管 Bean 必须具有钝化能力

2022-08-31 10:49:50

我在java Web表单中编写了一个简单的程序,但我收到以下错误:

WELD-000072 声明钝化作用域的受管 Bean 必须具有钝化能力。Bean: 具有限定符的受管 Bean [类 ]BeanPakage.DemoBeans@Any @Default @Named]

谁能告诉我这个错误来自哪里?

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

答案 1

您可以通过实现可序列化接口使 Bean 钝化功能:

public class DemoBean implements Serializable { ... }

请注意,对钝化能力有更多要求。有关详细信息,请参阅焊接文档。


答案 2

即使 CDI Bean 是可序列化的,错误也可能仍然存在:

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

示例类:

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

确保所有@Interceptors也是可分割的:

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

推荐