2012-09-07 17 views
7

Questa mia prima esperienza nello sviluppo di applicazioni basate su un'architettura Java EE e sto usandoCome dichiarare un bean gestito JSF in un'applicazione Spring 3.1?

  • JSF 2.0
  • Primavera 3.1
  • JPA 2,0

voglio chiedere ti pare su un problema con il quale sono un po 'confuso. Voglio dichiarare il mio bean gestito JSF ma ci sono molte soluzioni per gestire questo vincolo:

  1. Dichiarare il bean manged in faces-config.xml.
  2. Sovrascrivere il mio controller con l'annotazione @ManagedBean.
  3. Sostituire il mio controller con l'annotazione @Controller.

La mia domanda è: qual è la diffrenza tra queste tre soluzioni?! e quali modifiche dovrei apportare sul mio ApplicationConfig.java o/e web.xml?! Riguardo a Spring, dovrei inserire qualche tipo di ascoltatore nel mio web.xml?!

Ho davvero provato a leggere molti tutorial ed esempi ma ogni volta mi trovo bloccato!

risposta

23

Quando si integra Spring e JSF non si può davvero essere un principiante in entrambe le tecnologie, perché non giocano bene insieme. Il mio primo e migliore consiglio è quello di ottenere alcuni libri su JSF e Spring e comprenderli entrambi separatamente prima di tentare di integrarli.

Con ciò detto, JSF è un framework Web basato su componenti con un'enfasi su MVC. Spring è un'iniezione di dipendenza e un'inversione del framework di controllo che non è esclusiva per le applicazioni web.

Se non si capisce queste tre termini sono:

  • Component based framework web

  • Dependency Injection

  • Inversion of Control

Poi la mia il suggerimento è che ti limiti a quello che fai e inizia immediatamente a leggere.

Il problema principale con l'integrazione di queste due cose è che vi è una sovrapposizione di responsabilità tra i due framework che devono essere affrontati. JSF come framework indipendente mantiene l'ambito dei propri bean gestiti senza la necessità di un framework DI separato. Tuttavia, quando si introduce Spring, ci saranno naturalmente dei conflitti. Spring gestisce i propri bean oltre a JSF, quindi per fare riferimento a questi ManagedBeans e disporre di oggetti business o DAO opportunamente inseriti per l'uso, i ManagedBeans JSF devono diventare Spring Controller.

È possibile dichiarare un ManagedBean JSF con l'annotazione @Controller. Spring 3 è abbastanza intelligente da riconoscere che è un bean gestito da JSF e il nome del bean sarà qualunque sia il nome dichiarato per ManagedBean.

@Controller 
@Scope("session") 
@ManagedBean(name="testBean") 

Ora che questo è gestito, il prossimo problema è quello fastidioso EL Resolver fornito con l'implementazione JSF. In pratica, EL Resolver risolve solo le espressioni EL incontrate sulla tua pagina XHTML/JSF. Quando si fa riferimento a testBean, tuttavia, non sarà in grado di risolvere correttamente questo nome poiché si riferisce a un bean gestito JSF con quel nome e non sarà in grado di trovare il controller Spring con tutte le dipendenze Spring injection di cui si ha bisogno.

Spring 3 risolve questo problema fornendo un Resolver EL personalizzato da utilizzare al posto di quello fornito in dotazione con l'implementazione JSF. È possibile dichiarare di essere utilizzato in faces-config.xml

<application> 
    <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 

Ora finalmente:

Dovrei mettere un qualche tipo di ascoltatori nel mio web.xml?!

Se sono solo integrando JSF + Primavera, senza la necessità di eventuali altri servlet controllato primavera o senza la necessità di integrazione Primavera di sicurezza allora no non occorre nulla supplementare nel vostro web.xml. Dovresti solo dichiarare FacesServlet e i relativi parametri di contesto, oltre a qualsiasi altro servlet di librerie di componenti di terze parti che potrebbe essere necessario per la tua situazione.

+2

Grande spiegazione. Grazie! – Kris

Problemi correlati