@Destroy Annotation с помощью bean-компонентов с областью действия страницы

У меня есть компонент Seam с областью действия страницы, и у него есть метод void без параметров, аннотированный @Destroy, как показано ниже. Моя проблема в том, что метод destroy никогда не вызывается, даже если страница браузера изменена (т.е. область страницы закончилась).

@Name("myPageBean")
@Scope(ScopeType.PAGE)
public class MyPageBean {

    @Destroy
    public void destroy {
        // Code runs when the component is destroyed.
    }

}

У вас есть идея по этому вопросу?

Заранее спасибо.


person ovunccetin    schedule 13.04.2011    source источник


Ответы (2)


Когда контекст страницы уничтожается?

Область действия страницы неотличима от дерева компонентов пользовательского интерфейса. Следовательно, контекст страницы уничтожается, когда JSF удаляет дерево компонентов пользовательского интерфейса (также называемое представлением) из сеанса. Однако, когда это происходит, Seam не получает обратный вызов, и поэтому метод @Destroy для компонента с областью действия страницы никогда не вызывается. Если пользователь щелкает мышью со страницы или закрывает браузер, контекст страницы должен ждать, пока он не будет очищен в JSF, который убьет представление, к которому он привязан. Обычно это происходит, когда сеанс заканчивается или количество просмотров в сеансе превышает лимит. Это ограничение устанавливается с помощью параметров контекста com.sun.faces.numberOfViewsInSession и com.sun.faces.numberOfLogicalViews в реализации Sun. Оба по умолчанию равны 15. Однако обычно лучше не связываться с этими значениями.

Область страницы следует рассматривать просто как способ хранения данных, связанных с представлением, как средство поддержания целостности компонента пользовательского интерфейса. Этот акцент особенно актуален для таблиц данных, которые исторически были проблематичными. Я бы не стал использовать область страницы в качестве общего механизма хранения данных вариантов использования или рабочих процессов. Хороший способ думать об этом как кеш.

http://www.seamframework.org/42514.lace

person DaveB    schedule 25.01.2014

Вы когда-нибудь использовали этот компонент на странице? Если нет, я думаю, уничтожение не будет вызвано, потому что оно никогда не будет создано. или вы можете добавить @StartUp, чтобы принудительно создать bean-компонент при инициализации Scope.

person dennis    schedule 19.04.2011