WELD-000072 声明钝化范围的托管 bean 必须具有钝化能力
Posted
技术标签:
【中文标题】WELD-000072 声明钝化范围的托管 bean 必须具有钝化能力【英文标题】:WELD-000072 Managed bean declaring a passivating scope must be passivation capable 【发布时间】:2012-04-03 08:44:22 【问题描述】:我在 java web 表单中编写了一个简单的程序,但收到以下错误:
。 Bean:托管 Bean [class
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】:您可以通过实现 Serializable 接口使您的 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
...
【讨论】:
谢谢,可序列化的@Interceptors
是我的问题!【参考方案3】:
它必须是可序列化的。
查看这个答案。
https://community.jboss.org/thread/179828
最好, 安德斯
【讨论】:
【参考方案4】:使DemoBeans
序列化
@Named("DemoBeans")
@SessionScoped
public class DemoBeans implements Serializable
private String name;
public String getName()
return name;
public void setName(String name)
this.name = name;
【讨论】:
【参考方案5】:您还可以使用注释激活 bean 的钝化行为:
@Stateful(passivationCapable=true)
在这种情况下,您不需要实现 Serializable 接口。
问候。 豪尔赫
【讨论】:
【参考方案6】:验证导入
(有时 netbeans 使用其他库中的其他内容)
示例。导入 javax.faces.view.ViewScoped;通过 import javax.faces.bean.ViewScoped 改变它;
【讨论】:
实际上 JSF 2.3 弃用了javax.faces.bean.ViewScoped
以支持 javax.faces.view.ViewScoped
。这是否意味着我必须遍历所有视图范围的 bean 并使它们可序列化?来自javax.faces.bean.ViewScoped
javadoc:@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.
【参考方案7】:
原因:org.jboss.weld.exceptions.DeploymentException:WELD-000072:声明钝化范围的 Bean 必须具有钝化能力。 Bean:带有限定符 [@Default @Named @Any] 的托管 Bean [class com.marcos.controller.PersonaBean]
我解决了,显然是CDI,我没有识别bean,我只是让它更明确
@Named
@ViewScoped
public class PersonaBean implements Serializable
@Inject
private IPersonaService service;
public void registrar()
try
service.registrar(null);
catch (Exception e)
e.printStackTrace();
我的解决方案:
@Named ("PersonaBean")
@ViewScoped
public class PersonaBean implements Serializable
@Inject
private IPersonaService service;
public void registrar()
try
service.registrar(null);
catch (Exception e)
e.printStackTrace();
【讨论】:
以上是关于WELD-000072 声明钝化范围的托管 bean 必须具有钝化能力的主要内容,如果未能解决你的问题,请参考以下文章