Jsf 如何初始化Java FacesServlet
当FacesServlet启动时,我需要运行一些代码,但是由于FacesServlet被声明为final,我无法扩展它并覆盖init()方法 特别是,我想在hibernate删除并创建数据模型之后,在开发和测试期间向数据库写入一些数据 是否有办法配置面以运行某些方法,例如在Faces-config.xml中?Jsf 如何初始化Java FacesServlet,jsf,jakarta-ee,jsf-2,Jsf,Jakarta Ee,Jsf 2,当FacesServlet启动时,我需要运行一些代码,但是由于FacesServlet被声明为final,我无法扩展它并覆盖init()方法 特别是,我想在hibernate删除并创建数据模型之后,在开发和测试期间向数据库写入一些数据 是否有办法配置面以运行某些方法,例如在Faces-config.xml中? 还是最好创建一个进行初始化的单例bean?您可以实现自己的单例bean,在web应用程序启动时收到通知。由于它是一个容器管理的,您可以在其中注入资源,您可以做任何您想做的事情。另一个选项是
还是最好创建一个进行初始化的单例bean?您可以实现自己的单例bean,在web应用程序启动时收到通知。由于它是一个容器管理的,您可以在其中注入资源,您可以做任何您想做的事情。另一个选项是使用@Startup创建一个@singletonejb,并在它的@PostCreate方法中完成这项工作。通常ServelCutExtListEnter工作得很好,但是如果你在一个耳朵里有不止一个Web应用程序,它们都共享相同的持久性上下文,你可以考虑使用@ SuntLon bean。
嘿,你可能想在这里使用一些方面。只需将其设置为在之前运行即可
void init(ServletConfig servletConfig)
//Acquire the factory instances we will
//这是从
也许会对你有所帮助。使用一个
(类和方法名称实际上并不重要,由您自由选择,都与注释有关)
这保证在启动
FacesServlet
后构建,因此FacesContext
将在必要时可用。这与另一个答案所建议的ServletContextListener
相反。出于某种原因,这不起作用。只有当我在Bean中放入一个方法并从JSF页面调用它时,它才会被实例化。我使用Glassfish 3.1.2.2和JSF 2.1。是否从正确的包导入了@ApplicationScoped
?CDI的另一个版本无法与JSF@ManagedBean
结合使用。JSF托管bean的行为将类似于@NoneScoped
。谢谢!这就是问题所在。我修复了javax.faces.bean.ApplicationScoped的导入。
@ManagedBean(eager=true)
@ApplicationScoped
public class App {
@PostConstruct
public void startup() {
// ...
}
@PreDestroy
public void shutdown() {
// ...
}
}