WELD-000072パッシベーションスコープを宣言するマネージドBeanはパッシベーション対応である必要があります


89

Java Webフォームで簡単なプログラムを作成しましたが、次のエラーが発生します。

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 {
    ...
}

すべての@Interceptorsも捕捉可能であることを確認してください。

@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が他のライブラリの他のものを使用することもありました)

例。インポートjavax.faces.view.ViewScoped; importjavax.faces.bean.ViewScopedで変更します。


実際、JSF 2.3javax.faces.bean.ViewScopedは、を支持して非推奨になりましたjavax.faces.view.ViewScoped。これは、ビュースコープのBeanをすべて調べて、シリアル化できるようにする必要があることを意味しますか?javax.faces.bean.ViewScopedjavadocから: @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.
VasilSvetoslavov19年

0

原因:org.jboss.weld.exceptions.DeploymentException:WELD-000072:パッシベーションスコープを宣言するBeanはパッシベーション対応である必要があります。Bean:修飾子付きのマネージド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();
    }
  }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.