WELD-000072 비활성화 범위를 선언하는 관리 Bean은 비활성화 가능해야합니다.


89

Java 웹 양식으로 간단한 프로그램을 작성했지만 다음 오류가 발생합니다.

WELD-000072 비활성화 범위를 선언하는 관리 Bean은 비활성화 가능해야합니다. Bean : BeanPakage.DemoBeans한정자 [ @Any @Default @Named]가있는 관리 Bean [클래스 ]

누구든지이 오류의 원인을 알 수 있습니까?

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

답변:


174

Serializable 인터페이스를 구현하여 Bean 패시베이션을 가능하게 만들 수 있습니다.

public class DemoBean implements Serializable { ... }

패시베이션 기능을 사용하려면 더 많은 요구 사항이 있습니다. 자세한 내용은 용접 문서를 참조하십시오.


20

CDI Bean이 직렬화 가능하더라도 오류가 남아있을 수 있습니다.

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

예제 클래스 :

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

모든 @Interceptor 도 seializable 인지 확인하십시오 .

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

고마워, 직렬화 @Interceptors가 나에게 문제였다!
Anthony O.


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

}

2

주석을 사용하여 Bean의 비활성화 동작을 활성화 할 수도 있습니다.

@Stateful (passivationCapable = true)

이 경우 Serializable 인터페이스를 구현할 필요가 없습니다.

문안 인사. 호르헤


1

수입 확인

(때로는 netbeans가 다른 라이브러리의 다른 것을 사용했습니다)

예. import javax.faces.view.ViewScoped; import javax.faces.bean.ViewScoped로 변경하십시오.


실제로 JSF 2.3 javax.faces.bean.ViewScopedjavax.faces.view.ViewScoped. 이것은 모든 뷰 범위 빈을 살펴보고 직렬화 가능하게 만들어야 함을 의미합니까? 보내는 사람 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.
바실 Svetoslavov

0

원인 : org.jboss.weld.exceptions.DeploymentException : WELD-000072 : 비활성화 범위를 선언하는 Bean은 비활성화가 가능해야합니다. Bean : 한정자 [@Default @Named @Any]가있는 관리 Bean [class com.marcos.controller.PersonaBean]


나는 그것을 풀었고, 분명히 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();
    }
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.