Segue a baixo como utilizar ApplicationScope dentro de outros controllers/managedBeans onde podem ser muito úteis no reaproveitamento de informação “estáticas”.
@ApplicationScoped @ManagedBean(name = "applicationScopeController") public class ApplicationScopeController implements Serializable { private static final long serialVersionUID = 1L; private List<App> apps; public ApplicationScopeController() { this.apps = new ArrayList<App>(); for(int i=0;i <= 5; i++) this.apps.add(new App(Long.valueOf(i), "Description " + i )); } public List<App> getApps() { return apps; } }
@RequestScoped @ManagedBean(name = "requestController" ) public class RequestController implements Serializable { private static final long serialVersionUID = 1L; private int tamanhoListaApplicationScope; @ManagedProperty(value = "#{applicationScopeController}") private ApplicationScopeController aplicationScopeController; @PostConstruct public void init() { atualizarTamanho(); } public String addApp() { this.aplicationScopeController.getApps().add("Description " + this.tamanhoListaApplicationScope)); updateSize(); return "/pages/paginaRequestScope?faces-redirect=true"; } private void atualizarTamanho() { this.tamanhoListaApplicationScope = this.tamanhoListaApplicationScope.getApps().size(); } public int getSizeAplicationList() { return sizeAplicationList; } public void setAplicationScopeController(ApplicationScopeController aplicationScopeController) { this.aplicationScopeController = aplicationScopeController; } }
- Um controlller/managedBean de applicationScope não é instanciado quando executo a aplicação mas sim quando a primeira vez que é chamado;
- Para injetar controlller/managedBean de applicationScope é necessário o setter do atributo;
- O controlller/managedBean de applicationScope só estará injetado após a construção da classe, ou seja no @PostConstruct ou em algum método;