Java 如何在应用程序开始时将某个托管bean作为默认值启动“genericBean”?
如果我在JSF页面中有一个通用bean。像这样:Java 如何在应用程序开始时将某个托管bean作为默认值启动“genericBean”?,java,jsf,Java,Jsf,如果我在JSF页面中有一个通用bean。像这样: <h:outputLabel value="#{genericBean.content}"/> 及 然后我可以用其中一个来更改genericBean: Bean1 bean1 = new Bean1(); FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("genericBean", bean1); 或 根据一些商业逻辑 正如您所见
<h:outputLabel value="#{genericBean.content}"/>
及
然后我可以用其中一个来更改genericBean:
Bean1 bean1 = new Bean1();
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("genericBean", bean1);
或
根据一些商业逻辑
正如您所见,我正在使用genericBean
作为faces上下文中的标签。现在我的问题是:如何在应用程序开始时将bean1
作为默认值启动genericBean
谢谢。您可以使用应用程序范围(托管)bean,并在构造函数中为泛型bean设置默认值。您可以使用
ServletContextListener
来实现这一点
public class CustomApplicationContextListener implements ServletContextListener {
private static final String FOO = "foo";
public void contextInitialized(ServletContextEvent event) {
Bean1 bean1 = new Bean1();
event.getServletContext().setAttribute("genericBean", bean1 );
}
public void contextDestroyed(ServletContextEvent event) {
event.getServletContext().removeAttribute("genericBean");
}
}
web.xml
<listener>
<listener-class>com.yourpackage.CustomApplicationContextListener</listener-class>
</listener>
Bean1 bean1 = new Bean1();
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("genericBean", bean1);
Bean2 bean2 = new Bean2();
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("genericBean", bean2);
public class CustomApplicationContextListener implements ServletContextListener {
private static final String FOO = "foo";
public void contextInitialized(ServletContextEvent event) {
Bean1 bean1 = new Bean1();
event.getServletContext().setAttribute("genericBean", bean1 );
}
public void contextDestroyed(ServletContextEvent event) {
event.getServletContext().removeAttribute("genericBean");
}
}
<listener>
<listener-class>com.yourpackage.CustomApplicationContextListener</listener-class>
</listener>
@ManagedBean(name="genericBean", eager=true)
@ApplicationScoped
public class GenericBean {
...
}