WELD-000072 Управляемый компонент, объявляющий пассивирующую область, должен иметь возможность пассивации

89

Я написал простую программу в веб-формах Java, но получаю следующую ошибку:

WELD-000072 Управляемый компонент, объявляющий пассивирующую область, должен поддерживать пассивацию. Бин: управляемый компонент [класс 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;
    }
}
Кристина
источник

Ответы:

174

Вы можете сделать свой bean-компонент способным к пассивации, реализовав интерфейс Serializable:

public class DemoBean implements Serializable { ... }

Обратите внимание, что существует больше требований для возможности пассивации. Обратитесь к документации по Weld для получения дополнительной информации.

Мэтт Хэнди
источник
20

Ошибка может остаться, даже если bean-компонент CDI сериализуем:

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для меня проблема с сериализацией !
Энтони О.
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; измените его, импортируя javax.faces.bean.ViewScoped;

Фабиан Пизани
источник
На самом деле JSF 2.3 устарел javax.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.
Василь Святославов
0

Вызвано: org.jboss.weld.exceptions.DeploymentException: WELD-000072: Бин, объявляющий пассивирующую область, должен иметь возможность пассивации. 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();
    }
  }
}
Маркос Чакалиаза Альтамирано
источник