我在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;
}
}
答案 0 :(得分:146)
您可以通过实现Serializable接口来实现bean钝化:
public class DemoBean implements Serializable { ... }
请注意,对钝化能力有更多要求。有关更多信息,请参阅焊接文档。
答案 1 :(得分:19)
即使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 {
...
}
答案 2 :(得分:6)
答案 3 :(得分:5)
点击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;
}
}
答案 4 :(得分:2)
您还可以使用注释激活bean的钝化行为:
@Stateful(passivationCapable =真)
在这种情况下,您不需要实现Serializable接口。
的问候。 乔治
答案 5 :(得分:1)
验证导入
(有时netbeans使用其他库中的其他人)
实施例。 import javax.faces.view.ViewScoped;通过导入javax.faces.bean.ViewScoped;
更改它答案 6 :(得分:0)
引起:org.jboss.weld.exceptions.DeploymentException:WELD-000072:声明钝化作用域的Bean必须具有钝化功能。 Bean:Managed Bean [类com.marcos.controller.PersonaBean]带限定符[@Default @Named @Any]
我解决了它,显然是CDI,我没认出豆子,我只是让它更明确
@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();
}
}
}