如何初始化Java FacesServlet

Chr*_*ris 3 jsf java-ee jsf-2

我需要在FacesServlet启动时运行一些代码,但是当FacesServlet被声明为final时,我无法扩展它并覆盖init()方法.

特别是,在hibernate删除并创建数据模型之后,我想在开发和测试期间将一些数据写入数据库.

有没有办法配置Faces来运行某些方法,例如在faces-config.xml中?或者最好创建一个执行初始化的单例bean?

Bal*_*usC 7

使用急切初始化的 应用程序作用域 托管bean.

@ManagedBean(eager=true)
@ApplicationScoped
public class App {

    @PostConstruct
    public void startup() {
        // ...
    }

    @PreDestroy
    public void shutdown() {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

(类和方法名称实际上并不重要,它可以自由选择,所有关于注释)

这保证在启动之后构建FacesServlet,因此FacesContext可以在必要时使用.这与ServletContextListener其他答案所建议的相反.