Как создать один экземпляр компонента Backing Bean для каждой вкладки браузера? - PullRequest
0 голосов
/ 14 апреля 2020

Мое окружение : Java 7 / JSF 2.1 / PrimeFaces 6.1.

Моя цель : многократно создавать конкретную страницу моего приложения, по одной для каждой вкладки браузера, каждая с различным контекстом.

Моя проблема : каждый раз, когда я открываю вторую вкладку браузера, запрашивающую с того же URL, но с другим идентификатором объекта, предыдущий уничтожен, поэтому поддерживается только один экземпляр поддерживающего компонента.

Откуда я знаю, что : В моем компоненте поддержки есть один метод, помеченный @PosConstruct, а другой - @PreDestroy , поэтому я могу отслеживать жизненный цикл экземпляров.

Мой вспомогательный компонент помечается следующим образом:

@ViewController
public class MyBackingBeanMB extends AbstractBackingBeanMB {
    private static final long serialVersionUID = 1L;

    // many fields and methods
}

Аннотация @ViewController предоставляется платформой приложения, которую я должен использовать , Такая аннотация объявляется как:

@Named
@Controller
@Stereotype
@ViewScoped // For me, this should do the trick, but...
@Target(value={TYPE})
@Retention(value=RUNTIME)
@Inherited
public @interface ViewController {
}

Обновление 1:

Аннотация @Controller также предоставляется используемой платформой и объявляется как:

@InterceptorBinding
@Inherited
@Target({ TYPE, METHOD })
@Retention(RUNTIME)
public @interface Controller {
}

Есть идеи, что может быть не так?

TIA.

1 Ответ

0 голосов
/ 25 апреля 2020

После некоторого поиска в Inte rnet я обнаружил Apache DeltaSpike, который предоставляет новый вид области управляемых bean-компонентов, WindowScoped.

Управляемые bean-компоненты, аннотированные @ WindowScoped`, работают так же, как я хотел, предоставив мне точное поведение, в котором я нуждался, и это абсолютно совместимо с платформой, которую я должен использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...