JavaServer Faces (JSF) med Spring

1. Oversigt

I denne artikel vil vi se på en opskrift på adgang til bønner defineret i Spring fra en JSF-styret bønne og en JSF-side med henblik på at delegere udførelsen af ​​forretningslogik til Spring Beans.

Denne artikel antager, at læseren har en forudgående forståelse af både JSF og Spring separat. Artiklen er baseret på Mojarra-implementeringen af ​​JSF.

2. Om foråret

Lad os få defineret følgende bønne i foråret. Det UserManagementDAO bean tilføjer et brugernavn til en lagerhukommelse, og det er defineret af følgende grænseflade:

offentlig grænseflade UserManagementDAO {boolean createUser (String newUserData); }

Implementeringen af ​​bønnen konfigureres ved hjælp af følgende Java-konfiguration:

offentlig klasse SpringCoreConfig {@Bean offentlig UserManagementDAO userManagementDAO () {returner ny UserManagementDAOImpl (); }}

Eller ved hjælp af følgende XML-konfiguration:

Vi definerer bønnen i XML og registrerer CommonAnnotationBeanPostProcessor for at sikre, at @PostConstruct kommentar hentes.

3. Konfiguration

De følgende afsnit forklarer de konfigurationselementer, der muliggør integration af Spring- og JSF-sammenhænge.

3.1. Java-konfiguration uden web.xml

Ved at implementere WebApplicationInitializer vi er i stand til programmatisk at konfigurere ServletContext. Følgende er onStartup () implementering inde i MainWebAppInitializer klasse:

offentlig ugyldighed onStartup (ServletContext sc) kaster ServletException {AnnotationConfigWebApplicationContext root = ny AnnotationConfigWebApplicationContext (); root.register (SpringCoreConfig.class); sc.addListener (ny ContextLoaderListener (root)); }

Det AnnotationConfigWebApplicationContext bootstraps Spring'g-sammenhængen og tilføjer bønnerne ved at registrere SpringCoreConfig klasse.

Tilsvarende er der i Mojarra-implementeringen en FacesInitializer klasse, der konfigurerer AnsigterServlet. For at bruge denne konfiguration er det nok at udvide FacesInitializer. Den komplette implementering af MainWebAppInitializer, er nu som følger:

public class MainWebAppInitializer udvider FacesInitializer implementerer WebApplicationInitializer {public void onStartup (ServletContext sc) kaster ServletException {AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext (); root.register (SpringCoreConfig.class); sc.addListener (ny ContextLoaderListener (root)); }}

3.2. Med web.xml

Vi starter med at konfigurere ContextLoaderListener i web.xml ansøgningens fil:

  org.springframework.web.context.ContextLoaderListener 

Denne lytter er ansvarlig for at starte konteksten om forårets applikation, når webapplikationen starter. Denne lytter vil kigge efter en forårskonfigurationsfil med navnet applicationContext.xml som standard.

3.3. ansigter-config.xml

Vi konfigurerer nu SpringBeanFacesELResolver i ansigt-config.xml fil:

org.springframework.web.jsf.el.SpringBeanFacesELResolver

En EL-resolver er en tilslutningsbar komponent, der understøttes af JSF-rammen, hvilket giver os mulighed for at tilpasse JSF-runtimeens opførsel, når vi vurderer Expression Language (EL) -udtryk. Denne EL-resolver giver JSF runtime adgang til Spring-komponenter via EL-udtryk defineret i JSF.

4. Adgang til forårsbønner i JSF

På dette tidspunkt er vores JSF-webapplikation primet for at få adgang til vores Spring Bean fra enten en JSF-backing bønne eller fra en JSF-side.

4.1. Fra en Backing Bean JSF 2.0

Springbønnen kan nu tilgås fra en JSF-bagbønne. Afhængigt af hvilken version af JSF du kører, er der to mulige metoder. Med JSF 2.0 bruger du @ManagedProperty kommentar på JSF-styret bønne.

@ManagedBean (navn = "registrering") @RequestScoped offentlig klasse RegistrationBean implementerer Serializable {@ManagedProperty (value = "# {userManagementDAO}") forbigående privat IUserManagementDAO theUserDao; private streng brugernavn;
 // getters og setters}

Bemærk, at getter og setter er obligatoriske, når du bruger @ManagedProperty.

Nu - for at hævde tilgængeligheden af ​​en springbønne fra en administreret bønne, tilføjer vi createNewUser () metode:

public void createNewUser () {FacesContext context = FacesContext.getCurrentInstance (); boolsk operationStatus = userDao.createUser (brugernavn); context.isValidationFailed (); hvis (operationStatus) {operationMessage = "Bruger" + brugernavn + "oprettet"; }} 

Kernen i metoden er at bruge userDao Springbønne og få adgang til dens funktionalitet.

4.2. Fra en bagbønne i JSF 2.2

En anden tilgang, der kun er gyldig i JSF2.2 og derover, er at bruge CDI'er @Indsprøjte kommentar. Dette gælder for JSF-styrede bønner (med @ManagedBean annotation) og CDI-styrede bønner (med @Som hedder kommentar).

Faktisk med en CDI-kommentar er dette den eneste gyldige metode til injektion af bønnen:

@Named ("registrering") @RequestScoped offentlig klasse RegistrationBean implementerer Serialiserbar {@Inject UserManagementDAO theUserDao; }

Med denne tilgang er getter og setter ikke nødvendige. Bemærk også, at EL-udtrykket er fraværende.

4.3. Fra en JSF-visning

Det createNewUser () metode udløses fra følgende JSF-side:

For at gengive siden skal du starte serveren og navigere til:

//localhost:8080/jsf/index.jsf

Vi kan også bruge EL i JSF-visningen for at få adgang til Spring Bean. For at teste det er det nok at ændre linjenummer 7 fra den tidligere introducerede JSF-side til:

Her kalder vi createUser metode direkte på Spring DAO, der overfører bindingsværdien af brugernavn til metoden fra JSF-siden og omgå den styrede bønne alt sammen.

5. Konklusion

Vi undersøgte en grundlæggende integration mellem Spring- og JSF-sammenhængen, hvor vi har adgang til en Springbønne i en JSF-bønne og side.

Det er værd at bemærke, at mens JSF-runtime giver den tilslutningsbare arkitektur, der gør det muligt for Spring-rammen at levere integrationskomponenter, kan kommentarerne fra Spring-rammen ikke bruges i en JSF-kontekst og omvendt.

Hvad dette betyder er, at du ikke kan bruge kommentarer som f.eks @Autowired eller @Komponent osv. i en JSF-styret bønne, eller brug @ManagedBean kommentar på en forårsledet bønne. Du kan dog bruge @Indsprøjte kommentar i både en JSF 2.2+ -styret bønne og en springbønne (fordi Spring understøtter JSR-330).

Kildekoden, der ledsager denne artikel, er tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found