如何初始化Java FacesServlet

时间:2012-11-14 11:47:14

标签: jsf java-ee jsf-2

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

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

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

3 个答案:

答案 0 :(得分:7)

使用eagerly initialized application scoped managed bean

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

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

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

}

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

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

答案 1 :(得分:0)

您可以实现自己的ServletContextListener,以便在启动Web应用程序时收到通知。由于它是一个容器管理,你可以注入资源,你可以做任何你想做的事情。另一个选择是使用@Startup创建一个@Singleton ejb并在其中使用@PostCreate方法。通常ServletContextListener工作正常,但是如果你在耳朵里面有多个Web应用程序并且它们都共享相同的持久化上下文,你可以考虑使用@Singleton bean。

答案 2 :(得分:0)

嘿,你可能想在这里使用一些方面。只需将其设置为

之前运行
     void   init(ServletConfig servletConfig) 
      //Acquire the factory instances we will 

//来自here

也许this会帮助你。