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

Ви можете зробити свою пасивацію квасолі здатною, реалізувавши інтерфейс, що серіалізується:

public class DemoBean implements Serializable { ... }

Зверніть увагу, що існує більше вимог щодо здатності до пасивації. Для отримання додаткової інформації зверніться до документації щодо зварювання.


20

Помилка може залишитися, навіть якщо компонент 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

Ви також можете активувати поведінку пасивації вашого зерна за допомогою анотації:

@Stateful (passivationCapable = true)

У цьому випадку вам не потрібно реалізовувати серіалізований інтерфейс.

З повагою. Хорхе


1

Перевірити імпорт

(іноді netbeans використовували інші з інших бібліотек)

Приклад. імпортувати javax.faces.view.ViewScoped; змінити його, імпортуючи javax.faces.bean.ViewScoped;


Насправді JSF 2.3 припиняє свою діяльність javax.faces.bean.ViewScopedна користь javax.faces.view.ViewScoped. Чи означає це, що я повинен переглядати всі види квасолі, що їх охоплює, і зробити їх серіалізуючими? З 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: Бін, що оголошує пасивуючий обсяг, повинен мати можливість пасивації. Бін: керований бін [клас 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();
    }
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.