2013-09-24 11 views
6

sto usando Java EE 6 su JBoss EAP 6, e le mie fagioli JSF sono annotati in questo modo: @ManagedBean @ViewScoped (sia dal pacchetto javax.faces.bean)Viewscoped JSF e CDI fagioli

Tuttavia, sono anche fagioli CDI (costruttore predefinito, uso di @Inject @PreDestroy ecc.). Sto leggendo tutto il tempo che non è possibile mescolare queste annotazioni (JSF e CDI), ma apparentemente funziona bene: le iniezioni funzionano, preDestroy è chiamato in cambio di visualizzazione ecc.). Mi sto perdendo qualcosa? Qual è il problema? Perché non usare?

risposta

9

Il CDI @Inject funziona "ovunque" e quindi anche all'interno di JSF @ManagedBean. La controparte JSF @ManagedProperty funziona solo all'interno di @ManagedBean. Non è inoltre possibile @Inject un bean gestito JSF reale in un bean gestito CDI (invece, sarebbe un'istanza gestita da CDI). Forse questo è quello di cui stavi leggendo. Il consenso generale, tuttavia, è preferibilmente non mescolarli per evitare confusione tra i principianti. JSF utility library OmniFaces ha una compatibilità CDI @ViewScoped per JSF 2.0/2.1.

Il @PreDestroy è dal modo non specifico CDI, né è la sua controparte @PostConstruct. Dovrebbero funzionare bene sia nei bean gestiti da CDI che nei bean gestiti da JSF.

+0

Grazie per la risposta. Sembra che io sia davvero confuso da tutte queste cose ... Quindi quello che ho è un bean gestito da JSF, piuttosto che un bean CDI? Anche se questo bean soddisfa tutti i requisiti, si parla di documentazione del bean CDI (costruttore predefinito, non inner class etc)? In tal caso, qual è la differenza rispetto a un bean CDI? quali sono gli svantaggi o cosa non posso fare con questo bean che posso fare con un bean CDI? – htft

+0

Non è possibile '@ Inject' l'istanza del bean gestita JSF altrove. Se non ne hai davvero bisogno, allora non c'è davvero un inconveniente. Ma dovrebbe essere notato che JSF sta lentamente passando a CDI. Le nuove annotazioni JSF specifiche come '@ FlowScoped' sono solo CDI. La facility '@ ManagedBean' di JSF sarà deprecata in un prossimo futuro. Gli utenti sono incoraggiati a passare a CDI prima che accada. – BalusC