JavaServer Faces (JSF) s Springom
1. Pregled
U ovom ćemo članku pogledati recept za pristup grahu definiranom u Springu iz JSF upravljanog graha i JSF stranice, u svrhu delegiranja izvršavanja poslovne logike Spring grahu.
Ovaj članak pretpostavlja da čitatelj prethodno razumije JSF i Spring posebno. Članak se temelji na provedbi Mojarre JSF-a.
2. U proljeće
Idemo definirati sljedeći grah u proljeće. The UserManagementDAO bean dodaje korisničko ime u pohranu u memoriji i definirano je sljedećim sučeljem:
javno sučelje UserManagementDAO {boolean createUser (String newUserData); }
Implementacija bean-a konfigurirana je pomoću sljedeće Java konfiguracije:
javna klasa SpringCoreConfig {@Bean public UserManagementDAO userManagementDAO () {return new UserManagementDAOImpl (); }}
Ili pomoću sljedeće XML konfiguracije:
Grah definiramo u XML-u i registriramo CommonAnnotationBeanPostProcessor kako bi se osiguralo da @PostConstruct bilješka se podiže.
3. Konfiguracija
Sljedeći odjeljci objašnjavaju stavke konfiguracije koje omogućuju integraciju konteksta Spring i JSF.
3.1. Java konfiguracija bez web.xml
Primjenom WebApplicationInitializer u mogućnosti smo programski konfigurirati ServletContext. Slijedi Na početku() implementacija unutar MainWebAppInitializer razred:
javna praznina onStartup (ServletContext sc) baca ServletException {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext (); root.register (SpringCoreConfig.class); sc.addListener (novi ContextLoaderListener (korijen)); }
The AnnotationConfigWebApplicationContext bootstraps kontekst Spring'g i dodaje grah registracijom SpringCoreConfig razred.
Slično tome, u provedbi Mojarre postoji FacesInitializer klasa koja konfigurira FacesServlet. Da biste koristili ovu konfiguraciju, dovoljno je proširiti FacesInitializer. Kompletna provedba MainWebAppInitializer, sada je kako slijedi:
javna klasa MainWebAppInitializer proširuje FacesInitializer implementira WebApplicationInitializer {javna praznina onStartup (ServletContext sc) baca ServletException {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext; root.register (SpringCoreConfig.class); sc.addListener (novi ContextLoaderListener (korijen)); }}
3.2. S web.xml
Počet ćemo s konfiguriranjem ContextLoaderListener u web.xml datoteka prijave:
org.springframework.web.context.ContextLoaderListener
Ovaj je slušatelj odgovoran za pokretanje konteksta aplikacije Spring kada se web aplikacija pokrene. Ovaj će slušatelj potražiti proljetnu konfiguracijsku datoteku s imenom applicationContext.xml prema zadanim postavkama.
3.3. lica-config.xml
Sada konfiguriramo SpringBeanFacesELResolver u lice-config.xml datoteka:
org.springframework.web.jsf.el.SpringBeanFacesELResolver
Razrješivač EL je komponenta koja se može priključiti podržana u JSF okviru, što nam omogućuje prilagodbu ponašanja JSF vremena izvođenja prilikom procjene izraza jezika izraza (EL). Ovaj EL rješivač omogućit će JSF-u vrijeme izvođenja pristup komponentama Spring putem EL izraza definiranih u JSF-u.
4. Pristup proljetnom grahu u JSF-u
U ovom je trenutku naša JSF web aplikacija pripremljena za pristup našem proljetnom grahu s JSF pomoćnog graha ili sa JSF stranice.
4.1. Iz rezervnog graha JSF 2.0
Proljetnom zrnu sada se može pristupiti s JSF podloga. Ovisno o verziji JSF-a koju koristite, postoje dvije moguće metode. S JSF 2.0 koristite @ManagedProperty napomena na JSF-ovom upravljanom grahu.
@ManagedBean (name = "registration") @RequestScoped javna klasa RegistrationBean implementira serializabilne {@ManagedProperty (value = "# {userManagementDAO}") privremeni privatni IUserManagementDAO theUserDao; privatni niz userName;
// geteri i postavljači}
Imajte na umu da su getter i setter obavezni kada koristite @ManagedProperty.
Sada - da bismo potvrdili dostupnost proljetnog graha iz upravljanog graha, mi ćemo dodati createNewUser () metoda:
javna praznina createNewUser () {FacesContext context = FacesContext.getCurrentInstance (); logička operacijaStatus = userDao.createUser (korisničko ime); context.isValidationFailed (); if (operationStatus) {operationMessage = "User" + userName + "created"; }}
Suština metode je korištenje userDao Proljetni grah i pristup njegovoj funkcionalnosti.
4.2. Iz pomoćnog zrna u JSF-u 2.2
Drugi pristup, koji vrijedi samo u JSF2.2 i novijim verzijama, jest korištenje CDI-a @Ubrizgati bilješka. To se odnosi na grah kojim se upravlja JSF-om (s @ManagedBean napomena) i grah kojim upravlja CDI (s @Name bilješka).
Zapravo, s CDI napomenom, ovo je jedina valjana metoda ubrizgavanja zrna:
@Named ("registracija") @RequestScoped javna klasa RegistrationBean implementira Serializable {@Inject UserManagementDAO theUserDao; }
Ovim pristupom geter i postavljač nisu potrebni. Također imajte na umu da izraz EL nema.
4.3. Iz JSF pogleda
The createNewUser () metoda će se pokrenuti sa sljedeće JSF stranice:
Da biste prikazali stranicu, pokrenite poslužitelj i idite na:
//localhost:8080/jsf/index.jsf
EL možemo koristiti i u JSF prikazu za pristup proljetnom zrnu. Da biste ga testirali, dovoljno je promijeniti redak broj 7 s prethodno uvedene JSF stranice u:
Ovdje zovemo createUser metoda izravno na Spring DAO, prosljeđujući vrijednost vezanja Korisničko ime na metodu s JSF stranice, zaobilazeći upravljani grah zajedno.
5. Zaključak
Ispitali smo osnovnu integraciju između konteksta Spring i JSF, gdje smo u mogućnosti pristupiti Spring beanu u JSF beanu i stranici.
Vrijedno je napomenuti da, iako JSF vrijeme izvođenja pruža arhitekturu koja se može priključiti koja omogućuje Springovom okviru da pruža integracijske komponente, napomene iz Springvog okvira ne mogu se koristiti u JSF kontekstu i obrnuto.
To znači da nećete moći koristiti bilješke poput @Autowired ili @Komponenta itd. u JSF-ovom grahu ili koristite @ManagedBean napomena na grahu s proljetnim upravljanjem. Međutim, možete koristiti @Ubrizgati napomena u objektu JSF 2.2+ kojim se upravlja i u grahu Spring (jer Spring podržava JSR-330).
Izvorni kod koji prati ovaj članak dostupan je na GitHubu.