250 likes | 427 Views
Introduktion til JavaServer Faces. Introduktion til JavaServer Faces. Hvorfor JSF? Model-View-Controller (MVC) og Model 2 Elementerne i JSF. JavaServer Faces. JSF er en specifikation (JSR-252) fra SUN, som definerer et framework for WebApplikationer baseret på J2EE.
E N D
Introduktion til JavaServer Faces • Hvorfor JSF? • Model-View-Controller (MVC) og Model 2 • Elementerne i JSF
JavaServer Faces • JSF er en specifikation (JSR-252) fra SUN, som definerer et framework for WebApplikationer baseret på J2EE. • Specifikationen kan downloades fra http://www.jcp.org/en/jsr/detail?id=252 • JSF er en del af Java EE 5 & Java EE 6. • Formålet med JSF er at gøre det lettere at udvikle web applikationer, bl.a. gennem: • En veldefineret udvidelig komponentmodel • Mulighed for massiv værktøjsunderstøttelse • En eventorienteret programmeringsmodel (~Swing) • Veldefineret model for internationalisering (i18n), validering, konvertering, navigering etc. • JSF er på mange måder en videreudvikling og forbedring af Struts og er da også udviklet af den samme, nemlig Craig McClanahan. • Der findes allerede en række implementationer af JSF, bl.a. fra Sun, IBM, Oracle, Richfaces (JBoss), MyFaces, Primefaces
Hvorfor JSF? • Java Web-teknologierne giver web programmøren en række stærke kort på hånden, servlets, JSP, taglibs, java beans, men der er også meget der ikke tages hånd om, fx: • navigation mellem sider (uoverskueligt, er tit fedtet ind i Java/JSP-kode) • modularisering af logik, konfiguration etc. • internationalisering (hvordan udskiftes alle tekster i applikationen på en let måde) • konvertering mellem java-objekter og http (fx mellem en række parametre og Person-objekter) • validering (hvordan udtrykkes regler, hvad er semantikken, hvordan propageres valideringsfejl til JSP-sider, redundante regler (serverside Java) og client-side (JavaScript)) • genbrug af fx valideringsregler, konverteringslogik... • håndtering af konversationel tilstand, fx værdien af en forms felter • Der er opstået en lang række løsninger – oftest baseret på model-2, som adresserer disse mangler, men de er ofte person/projekt-specifikke og af svingende kvalitet.
Målet med JSF JSF specifikationen: • JavaServer Faces (JSF) is a user interface (UI) framework for Java web applications. It is designed to significantly ease the burden of writing and maintaining applications that run on a Java application server and render their UIs back to a target client. JSF provides ease-of-use in the following ways: • Makes it easy to construct a UI from a set of reusable UI components • Simplifies migration of application data to and from the UI • Helps manage UI state across server requests • Provides a simple model for wiring client-generated events to server-side application code • Allows custom UI components to be easily built and re-used • Most importantly, JSF establishes standards which are designed to be leveraged by tools to provide a developer experience which is accessible to a wide variety of developer types, ranging from corporate developers to systems programmers....
Værktøjsunderstøttelse Værktøjsunderstøttelse er medtænkt i designet afJSF og der findes p.t. enrække værktøjer, somunderstøtter udviklingenaf JSF-applikationer. Her ses WSAD 5.1.2 fra IBM Liste med komponenter JSF-komponenter Properties for den valgte komponent
Web Applikations infrastruktur, evolution Brugerstyret konfiguration højt Portalsystemer, fx JSR-168 Pageflows Markup Generering, fx HTML udfra UI-komponenter Integration af UI-komponenter og Business Objekter JSF Stateful Server Side UI komponentmodel Håndtering af UI-events på serversiden Typekonvertering abstraktions-niveau Abstraheret navigation mellem sider Formhåndtering og validering Internationalization (i18n) Struts (+Tiles, Validator) Model 2-arkitektur Integreret fejlhåndtering Genbrug af skabeloner Resource management JSP Custom Tags, Basal skabelonmekanisme Integration m. Java, sessionsstyring, lifecycle, fejlhåndtering, sikkerhed, deployment, pakning, integration m. J2EE Servlets Webserver/ressourcestyring HTTP-kommunikation lavt
Introduktion til JavaServer Faces • Hvorfor JSF? • Model-View-Controller (MVC) og Model 2 • Elementerne i JSF
Model-2 (front controller) • The front controller handles parameters from forms • The front controller interacts with backend systems (using gateways) • The front controller selects the next view to send to the user • The gateways provide a simple facade to backendsystems • The JSP pages renders the page that is sent to the client EJB Controller Model DB Front Controller Gateways HTTP request maybe with form data JPD JMS Gatewaysmay return data May transfer data to JSP(often done with JavaBeans) ... JSP pages HTTP response with HTML page(maybe with form) Some think it is ok, if the JSP uses gateway object directly... View
JSF som en Model-2-arkitektur Model faces-config .xml-fil EJB Managed Beans konfigureres Controller DB FacesServlet Gateways JPD JMS ... vælger læser Ej omfattet af JSF JSP sider m JSF-tags View
Introduktion til JavaServer Faces • Hvorfor JSF? • Model-View-Controller (MVC) og Model 2 • Elementerne i JSF
Overblik over elementer i JSF • Vi skal kort kigge på de forskellige elementer, der indgår i JSF-frameworket. I dette kapitel ser vi isoleret på hvert element og i næste kapitel ser vi på hvordan elementerne samarbejder. • Vi kigger på følgende elementer: • FacesServlet • web.xml • faces-config.xml • JSF-sider / JSF-tags • Property-files • Managed Beans • Navigation rules • Validators • Converters
Controller: FacesServlet • FacesServlet’en er hjertet i enhver JSF-applikation og indtager rollen som Controller. • FacesServlet er implementeret i et JSF-framework af frameworkets leverandør. • Servletten konfigureres via en XML-fil og som JSF-applikationsudvikler er det sjældent, at man arbejder direkte med servletten. • Alle JSF-requests skal gå via FacesServlet, da hele JSF-infrastrukturen ellers ikke er etableret ift. det pågældende request.
Registrering af Faces Servlet i web.xml • Faces Servletten skal registreres i webapplikationens deployment descriptor. • Dette gøres på vanlig vis: • Faces Servletten skal også sættes op til at modtage requests på specifikke URLs. Det kan enten gøres med prefix mapping eller extension mapping: <servlet> <servlet-name> faces-servlet-name </servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </servlet> • <servlet-mapping> • <servlet-name> faces-servlet-name </servlet-name> • <url-pattern>/faces/*</url-pattern> <!-- Prefix mapping --> • </servlet-mapping> • <servlet-mapping> • <servlet-name> faces-servlet-name </servlet-name> • <url-pattern>*.jsf</url-pattern> <!– Extension mapping --> • </servlet-mapping>
Konfigurationsfilen: faces-config.xml • FacesServlet’en konfigureres ud fra een eller flere XML-konfigurationsfiler. • Typisk benytter man blot 1 konfigurationsfil, kaldet faces-config.xml, som placeres i WEB-INF-folderen i web-applikationen. • Konfigurationsfilen er ansvarlig for at sammenkoble de fleste af delelementerne i en JSF-applikation, og den registrerer bl.a. Managed Beans, Message Bundles, Navigationsregler, validatorer, converters og factories. • Konfigurationsfiler skal overholde skemaet på http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd (version 2.0), http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd(version 1.2) eller http://java.sun.com/dtd/web-facesconfig_1_1.dtd(version 1.1). • Hvis man har behov for lidt mere fleksibilitet, kan man imidlertid registrere en context-parameter i applikationen web.xml med navnet javax.faces.CONFIG_FILES. Værdien af denne parameter kan da referere til en kommasepareret liste af ressourcer (lokation relativ til applikationens rod). Denne parameter tager præcedens over WEB-INF/faces-config.xml. • Konfigurationsfilen kan redigeres i hånden, men det er tanken, at man benytter et værktøj. • Fra JSF 2.0 kan man erstatte dele af registreringerne i faces-config.xml med annotationer i de relevante klasser (f.eks. Managed Beans, validatorer og converters).
JSF-sider og JSF-taglibs • Til opbygning af skærmbilleder kan JSF benytte mange forskellige teknologier. • Indtil 2.0 var JSP den eneste view-teknologi som der var out-of-the-box-understøttelse for. Imidlertid viste det sig at JSPs arkitektur grundlæggende ikke var optimal for JSF, og talrige tredjepartsalternativer til JSP opstod derfor. • Den mest populære af disse, Facelets, er blevet standard view-teknologi fra JSF 2.0. • Views i JSF-web-applikationer laves typisk som JSP-sider eller Facelets som benytter JSF-tags. En JSP-side eller Facelet med JSF-tags kaldes også for en JSF-side. • JSF-tags er almindelige tag libraries, der følger med JSF-frameworket. Disse tags sørger for integrationen med JSF-frameworket. • JSF indeholder en lang række tags, som bl.a. repræsenterer brugergrænsefladekomponenter (fx alle HTML-komponenter). • JSF’s komponentmodel er udvidelig, så vi kan selv lave nye komponenter og wrappe dem i tags.
Property-files • JSF-har indbygget en simpel mekanisme til Internationalisering (i18n), dvs. muligheden for at ændre en applikations sprog dynamisk. • JSF benytter til dette formål alm. Java.property-files, hvor hver fil indeholder tekster på et sprog. Ved at vælge en anden fil kan sproget skiftes. • En property-fil består af key/value-par, hvor key, refereres fra applikation og value er den faktiske tekst på et givet sprog. labs/jsf/bundle/Messages.properties
Managed Beans • Managed Beans (MB), er alm. Java-klasser, som registreres i faces-config.xml-filen (alternativt annoteres som @ManagedBean i JSF 2.x). • JSF styrer livscyklus for Managed Beans, dvs. at det er JSF, der instantierer MB’er, binder dem i relevante contexts og nedlægger dem igen. • JSFs UI-komponenter kan automatisk propagere data mellem Managed Beans og HTTP-request/responses. • Managed Beans kan udgøre en objektmodel af applikationens domæne. • Med EJB 3.x kan Entity Beans benyttes som Managed Beans. Hibernate-objekter kan ligeledes bruges.
Navigation rules • I JSF kan alle navigationsregler placeres i faces-context.xml. • En navigationsregel beskriver hvordan en bruger kommer fra 1 side/action til en ny side.
Validators • Validators er Java-klasser (evt. pakket ind i et JSF-tag), som JSF bruger til at validere data, som brugeren har indtastet. • En validator kan generere (internationaliserede) fejlbeskeder som sendes tilbage til brugeren. • Validators bruges til validering på feltniveau udfra syntaktiske regler. Validators er fx oplagte at bruge til validering af en email-adresse, et password (fx længde og kompleksitet, men ikke at 2 passwords er ens)
Converters • Et grundlæggende problem i mange webapplikationer er, at konvertere mellem HTTP(HTML), som er tekstbaseret (alt er strenge) og Java-objekter. • Et eksempel er fx et HTTP-request med en parameter, date, med værdien ’2002-8-23’. I applikationen ønsker vi at repræsentere denne værdi som et java.util.Date-objekt og har derfor brug for en metode til at konvertere fra streng-form til objekt-form. Tilsvarende har vi brug for at konvertere fra objekt-form til streng-form, når der skal genereres et response til brugeren. • Converters i JSF er klasser, der implementerer javax.faces.convert.Converter-interfacet og indeholder logik til at konvertere mellem objekter og strenge.
Andre JSF-begreber • Der er en del JSF-begreber vi ikke har dækket i det foregående: • Renderers og RenderKits • ViewHandlers • NavigationHandlers • StateManager • Resolvers • Events, Actions og Listeners • Faser • Vi kigger på en del af disse begreber i løbet af kurset.
Web-ressourcer om JSF • JSF hos Oraclehttp://javaserverfaces.java.net/ • JSF Centralhttp://www.jsfcentral.com • JSF Tutorialshttp://www.jsftutorials.net • Gode ressourcer om Java og Java EEhttp://www.theserverside.com