Home > Java for Web, Programmazione > JSF: Usare un Bean anche da altre classi Java

JSF: Usare un Bean anche da altre classi Java

Attraverso la dichiarazione di un bean (di livello application, session o request) nel file faces-config.xml, è possibile, tramite le Language Expression (LE), usare gli oggetti ed i attributi nelle pagine web, jsp o xhtml che siano. Ma spesso mi è stato chiesto come è possibile accedere a queste stesse istanze di bean direttamente da codice java di altri bean o classi dell’applicazione JSF.

Io sono solito crearmi un file di utilità, dove tra i vari metodi inserisco dei metodi statici che mi permettono di prendere i bean nel loro preciso posizionamento (application, session o request), e, se ancora non lo  sono, di instanziarli. Un esempio di questo genere di metodo per un bean a livello sessione può essere:

public static SessionBean getSessionBean() {
SessionBean ilBean = ((SessionBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SessionBean"));
if (ilBean == null) {//il bean non esiste a livello sessione
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("SessionBean", new SessionBean());
}
return ((SessionBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("SessionBean"));
}

Ovviamente nel file faces-config.xml deve essere dichiarato il bean di scope session e nome SessionBean.

Per gli altri due tipi di scope, è possibile usare i metodi che ritornano una Collection getApplicationMap() e getRequestMap(), rispettivamente per gli oggetti che si hanno a livello applicazione e livello richiesta.

Java for Web, Programmazione , , , , , , , , , , , , ,

  1. Nessun commento ancora...
  1. Nessun trackback ancora...