OmniFaces не уничтожает компонент ViewScoped после закрытия вкладки / окна - PullRequest
2 голосов
/ 06 марта 2019

У меня есть простое приложение jsf с одним Bean-компонентом.

import org.omnifaces.cdi.ViewScoped;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Named;
import java.io.Serializable;

    @Named
    @ViewScoped
    public class IndexMg implements Serializable {
        List list;

        @PostConstruct
        public void init() {
            list = new ArrayList();
            list.add("as");
            list.add("dsu");
        }

        @PreDestroy()
        public void end() {
            System.out.println("predestroy called");
        }
    }

в соответствии с этим ответом и беседой в этой публикации , а также с документацией OmniFaces Компонент OmniFaces ViewScoped должен вызывать функцию @PreDestroy, когда я перемещаюсь по GET, или закрываю вкладку / окно браузера, но ничего не происходит, пока сеанс не будет уничтожен.

Я использую Wildfly 15 в качестве сервера приложений и вижу сессию activeViewMaps.Yoy может видеть содержание сессий здесь .Это примерно так:

com.sun.faces.application.view.activeViewMaps   {1d31c745-c202-4256-a2c6-60035bfdd8e7={org.omnifaces.cdi.viewscope.ViewScopeStorageInSession=b557d2aa-ba35-4ff2-9f4e-3cc4ac312c9a}, ca02df9d-be65-4a75-a399-3df9eabbcfd3={org.omnifaces.cdi.viewscope.ViewScopeStorageInSession=aaef6a5a-d385-4e33-a990-200f94b67583}}

Я открыл несколько окон, закрыл их, но ни одно из них не было уничтожено до уничтожения сеанса (30 минут спустя).В чем дело?я что-то забыл?

это мой пом

 <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
 </properties>

 <dependencies>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <version>2.3.4</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/javax.enterprise/cdi-api -->
        <dependency>
            <groupId>javax.enterprise</groupId>
            <artifactId>cdi-api</artifactId>
            <version>2.0.SP1</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.omnifaces/omnifaces -->
        <dependency>
            <groupId>org.omnifaces</groupId>
            <artifactId>omnifaces</artifactId>
            <version>3.2</version>
        </dependency>

  </dependencies>
...