JavaServer Faces (JSF) tavasszal

1. Áttekintés

Ebben a cikkben megvizsgáljuk azt a receptet, amellyel a Spring-ben definiált babhoz lehet hozzáférni egy JSF által kezelt babból és egy JSF-oldalról, annak érdekében, hogy az üzleti logika végrehajtását átruházhassuk a Spring babra.

Ez a cikk feltételezi, hogy az olvasó előzetesen megértette mind a JSF-et, mind a Spring-et külön-külön. A cikk a JSF Mojarra megvalósításán alapul.

2. Tavasszal

A következő babot határozzuk meg tavasszal. A UserManagementDAO A bean felhasználónevet ad hozzá a memória tárolójához, és ezt a következő interfész határozza meg:

nyilvános felület UserManagementDAO {boolean createUser (String newUserData); }

A bab implementációja a következő Java konfigurációval van konfigurálva:

public class SpringCoreConfig {@Bean public UserManagementDAO userManagementDAO () {return new UserManagementDAOImpl (); }}

Vagy használja a következő XML-konfigurációt:

Meghatározzuk a babot XML-ben, és regisztráljuk CommonAnnotationBeanPostProcessor annak biztosítására, hogy a @PostConstruct feljegyzés kerül felvételre.

3. Konfiguráció

A következő szakaszok elmagyarázzák azokat a konfigurációs elemeket, amelyek lehetővé teszik a Spring és a JSF összefüggések integrálását.

3.1. Java konfiguráció nélkül web.xml

A WebApplicationInitializer programozottan tudjuk konfigurálni a ServletContext. A következő a Indításkor() végrehajtása a MainWebAppInitializer osztály:

public void onStartup (ServletContext sc) dobja a ServletException {AnnotationConfigWebApplicationContext gyökér = new AnnotationConfigWebApplicationContext (); root.register (SpringCoreConfig.class); sc.addListener (új ContextLoaderListener (root)); }

A AnnotationConfigWebApplicationContext bootstrap a Spring'g kontextust, és hozzáadja a babot a SpringCoreConfig osztály.

Hasonlóképpen, a Mojarra megvalósításban van egy FacesInitializer osztály, amely konfigurálja a ArcokServlet. A konfiguráció használatához elegendő a FacesInitializer. A. Teljes megvalósítása MainWebAppInitializer, most a következő:

public class MainWebAppInitializer kiterjeszti a FacesInitializer végrehajtja a WebApplicationInitializer {public void onStartup (ServletContext sc) dob ServletException {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext (); root.register (SpringCoreConfig.class); sc.addListener (új ContextLoaderListener (root)); }}

3.2. Val vel web.xml

Kezdjük a ContextLoaderListener ban ben web.xml az alkalmazás fájlja:

  org.springframework.web.context.ContextLoaderListener 

Ez a hallgató felelős a tavaszi alkalmazáskörnyezet elindításáért, amikor a webalkalmazás elindul. Ez a hallgató egy tavaszi konfigurációs fájlt keres applicationContext.xml alapértelmezés szerint.

3.3. faces-config.xml

Most konfiguráljuk a SpringBeanFacesELResolver ban,-ben face-config.xml fájl:

org.springframework.web.jsf.el.SpringBeanFacesELResolver

Az EL felbontó egy plug-in összetevő, amelyet a JSF keretrendszer támogat, lehetővé téve számunkra, hogy testre szabjuk a JSF futásidejének viselkedését az Expression Language (EL) kifejezések kiértékelésekor. Ez az EL felbontó lehetővé teszi a JSF futásidejű hozzáférését a Spring komponensekhez a JSF-ben meghatározott EL kifejezéseken keresztül.

4. A tavaszi babok elérése a JSF-ben

Ezen a ponton a JSF webalkalmazásunk arra szolgál, hogy a tavaszi babhoz JSF háttérbabból vagy egy JSF oldalról férjen hozzá.

4.1. Backing Bean JSF 2.0-ból

A tavaszi bab most hozzáférhető egy JSF háttérbabból. A futtatott JSF verziójától függően kétféle módszer létezik. A JSF 2.0-val a @ManagedProperty annotáció a JSF által kezelt babon.

@ManagedBean (name = "registration") @RequestScoped public class A RegistrationBean megvalósítja a Serializable {@ManagedProperty (value = "# {userManagementDAO}") átmeneti privát IUserManagementDAO theUserDao; private String felhasználónév;
 // szerelők és beállítók}

Ne feledje, hogy a getter és a szetter kötelező a @ManagedProperty.

Most - a tavaszi bab hozzáférhetőségének igazolásához egy kezelt babból hozzáadjuk a createNewUser () módszer:

public void createNewUser () {FacesContext context = FacesContext.getCurrentInstance (); logikai műveletStatus = userDao.createUser (felhasználónév); context.isValidationFailed (); if (operationStatus) {operationMessage = "Felhasználó" + felhasználónév + "létrehozva"; }} 

A módszer lényege a userDao Tavaszi bab és hozzáférés annak funkcionalitásához.

4.2. Támogató babtól a JSF 2.2-ben

Egy másik, csak a JSF2.2 és újabb verziókban érvényes megközelítés a CDI-k használata @ Injekció annotáció. Ez vonatkozik a JSF által kezelt babokra (a @ManagedBean annotáció) és a CDI által kezelt bab (a @Nevezett annotáció).

Valójában a CDI kommentárokkal ez az egyetlen érvényes módszer a bab befecskendezésére:

@Named ("registration") @RequestScoped public class A RegistrationBean végrehajtja a Serializable {@Inject UserManagementDAO theUserDao; }

Ezzel a megközelítéssel a getterre és a szetterre nincs szükség. Vegye figyelembe azt is, hogy az EL kifejezés hiányzik.

4.3. JSF nézetből

A createNewUser () metódust a következő JSF oldal váltja ki:

Az oldal megjelenítéséhez indítsa el a szervert, és keresse meg a következő címet:

//localhost:8080/jsf/index.jsf

Az EL-t a JSF nézetben is használhatjuk a tavaszi bab eléréséhez. Ennek teszteléséhez elegendő a korábban bevezetett JSF oldalról a 7-es sort megváltoztatni a következőre:

Itt hívjuk a felhasználó létrehozása metódust közvetlenül a tavaszi DAO-ra, a felhasználónév a módszerre a JSF oldalon belül, együttesen megkerülve a kezelt babot.

5. Következtetés

Megvizsgáltuk a Spring és a JSF kontextus közötti alapvető integrációt, ahol hozzáférhetünk egy Spring babhoz egy JSF babban és oldalon.

Érdemes megjegyezni, hogy míg a JSF futásideje biztosítja a beépíthető architektúrát, amely lehetővé teszi a tavaszi keretrendszer számára az integrációs komponensek biztosítását, a tavaszi keretrendszer annotációi nem használhatók JSF kontextusban és fordítva.

Ez azt jelenti, hogy nem fogja tudni használni a következő jelöléseket: @Autowired vagy @Összetevő stb. egy JSF által kezelt babban, vagy használja a @ManagedBean egy tavasszal kezelt bab babra. Használhatja azonban a @ Injekció annotáció mind a JSF 2.2+ kezelt babban, mind a Spring babban (mert a Spring támogatja a JSR-330-at).

A cikkhez tartozó forráskód elérhető a GitHub oldalon.