CDI ViewScoped: abbandoniamo i backing bean JSF!

Il ViewScoped in JSF 2 è molto usato e molto importante: ci permette di salvare lo stato di una vista per il solo arco di tempo in cui questa è attiva. Recentemente abbiamo confrontato il comportamento dei bean in questo scope rispetto a quelli in ConversationScoped introdotti dalla specifica CDI. Sarebbe bello quindi poter usare la potenza dei bean CDI con la semplicità della gestione del ViewScoped. Come? Esistono diverse vie.

Injection o lookup programmatico? Aiutati che CDI t’aiuta

Siamo tutti un po’ innamorati della Dependancy Injection (DI), come quella di CDI per esempio: ci piace per l’estrema eleganza del codice, per il disaccoppiamento tra classi, per mille altre ragioni del mondo, e un po’ anche per pigrizia! Purtroppo però, esistono situazioni in cui l’idillio si infrange e la DI non viene risolta dal nostro Inversion of Control (IoC) container preferito: ci sono infatti alcuni artefatti come i Converter e i Validator di JSF che non sono gestiti da questi contesti, non meno lo è CDI. Urge un lookup programmatico! Vediamo come fare.

ViewScoped vs ConversationScoped. JSF vs CDI. Chi vincerà?

Tra le novità della piattaforma Java EE 6, sicuramente spicca CDI. Spring e Seam hanno fatto scuola e il meglio entra nella specifica Java Enperprise. Uno dei primi concetti con cui dobbiamo fare i conti è il lifecycle dei bean CDI, governato dagli scopes. Già da subito si nota che molti di questi scope si sovrappongono a quelli della specifica JSF 2, e il fatto che i bean CDI siano referenziabili anche da pagine web tramite Expression Language (EL), fa pensare che CDI stia invadendo il campo di JSF. Cerchiamo di capire su cosa.

JSF 2 e il versionamento delle risorse

In un post precedente abbiamo visto da vicino cosa significa “risorsa” per JSF 2, insieme alle convenzioni e gli strumenti necessari per gestirle. Una volta messo in piedi questo sistema, una domanda lecita è: ma come faccio a gestire il loro versionamento? Se modifico un css o uno script, come faccio ad essere sicuro che il browser dell’utente scarichi l’ultima versione e invalidi quella in cache? Rispondiamo a questa domanda in stile JSF 2!