Follow Us on Twitter

Java Server Faces

Januari 2005 - Sinds het voorjaar van 2004 is er een nieuwe J2EE standaard voor het ontwikkelen van webapplicaties; Java Server Faces (JSF). JSF is gebaseerd op het Model View Controller (MVC) ontwerp patroon en bouwt voort op de concepten van Struts. Oracle heeft intensief bijgedragen aan het tot stand komen van deze standaard.

Oracle heeft afgelopen zomer een ‘early access release’ uitgebracht van JSF. Deze implementatie is gebaseerd op Oracle’s User Interface XML (UIX) framework dat hiermee in de toekomst gaat verdwijnen. UIX is positief ontvangen binnen de Java gemeenschap dus dat schept verwachtingen ten aanzien van JSF.

In dit Whitebook gaan we in op de JSF standaard, de implementaties van SUN en Oracle en de voor- en nadelen hiervan. Om één en ander zelf uit te proberen of na te lezen zijn er aan het eind van het Whitebook wat handige links opgenomen.

Wat is "Java Server Faces"?

Java Server Faces is een servletapplicatie. Zoals bij Struts worden alle cliënt requests volgens het MVC patroon via één centrale servlet (FacesServlet) verwerkt en is de navigatie afhankelijk van de context (FacesContext) van de request. Deze navigatie is configureerbaar (faces-config.xml). Zo kan een gebruiker een welkom-scherm te zien krijgen bij een succesvolle inlogactie of een foutmelding met het verzoek om nogmaals in te loggen als de gebruiker een fout in de invoer heeft gemaakt.

UI componenten

Het vernieuwende aspect van JSF ligt voornamelijk in het gebruik van de User Interface componenten view waarmee een webpagina opgebouwd wordt. UI componenten kunnen HTML-achtige elementen als forms en tabellen zijn maar ook messages of selecties. Deze componenten bevinden zich in de view in een tree onder het root UI component en kunnen met behulp van een renderer vertaald worden naar een bepaald uitvoertype, zoals HTML of WML. Hierdoor is het mogelijk door een simpele wijziging de applicatie geschikt te maken voor een ander platform. Standaard wordt een HTML renderkit meegeleverd.

Onderstaand een voorbeeld van een JSF "view" definitie;

<%@ page contentType="text/html" language="java" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> 

<f:view id="wizard-buttons"> 
<h:panelGrid columns="2"> 
<h:commandButton value="< Back" action="back"
disabled="#{wizardButtons.hasBack}" />
<h:commandButton value="#{wizardButtons.nextLabel}"
action="next"
disabled="#{wizardButtons.hasNext}"/> 
</h:panelGrid> 
</f:view> 

Eventhandling

In JSF is het concept van eventhandling geïntroduceerd. Hierdoor kunnen op allerlei plaatsen in het verwerkingsproces events afgevuurd worden, waar geabonneerde componenten op kunnen reageren en waarmee allerlei keuzes gemaakt kunnen worden.

Backing beans, converters en validators

Zoals Struts actionforms heeft, heeft JSF backing- of managed bean’s. Deze kunnen in JSF naast data echter ook logica bevatten en is daarmee een combinatie van een formbean en een action in Struts. Deze beans kunnen met value- en methodbinding met behulp van de java expression language (EL) aan de UI componenten gekoppeld worden. Naast deze beans bevat JSF ook converters en validators die -anders dan bij Struts- ook per component aangeroepen kunnen worden. Converters vertalen invoer naar een gewenst formaat en validators controleren of de ingevoerde waarden aan de voorwaarden voldoen.

Requestverwerking

In onderstaand figuur staat een overzicht van het procesmodel van een JSF request. Als het request binnenkomt wordt de UI component view opgebouwd op de server, waarbij de requestparameters (die de gebruiker- en applicatiegegevens bevatten) ingevoerd worden. Daarna worden de validaties en modelupdates uitgevoerd. Vervolgens kunnen de applicatieacties uitgevoerd worden. Als alle verwerkingen klaar zijn wordt de UI component view gerendered naar het gewenste uitvoerformaat en teruggestuurd naar de gebruiker. Tussen al deze stappen kunnen events afgevuurd en opgevangen worden.


Sun JSF

JSF wordt door SUN geleverd met twee JSP tag libraries (core en html) die gebruikt kunnen worden om de UIComponentBase, zoals door SUN gedefinieerd, op te bouwen. Het is echter niet noodzakelijk gebruik te maken van JSP’s om de frontend te maken. Sun geeft ook een voorbeeld van een implementatie met User Interface Language (XUL). In dit geval is het echter niet mogelijk gebruik te maken van de voorgedefinieerde tag library functionaliteit en zal er veel werk zelf gedaan moeten worden. De UIComponentBase tree is nogal HTML georiënteerd. Het is jammer dat er niet voor gekozen is de componenten tree op een hoger abstractieniveau zoals Formatting Objects of XUL vorm te geven.

Oracle ADF Faces

Het belangrijkste onderdeel van de Oracle implementatie van JSF ADF Faces is het UI componenten gedeelte. Oracle bouwt voort op het JSF framework van Sun en voegt daar als één van de eerste leveranciers een krachtig pagina componenten framework aan toe; de UIXComponentBase. Naast de vele extra componenten die dit framework toevoegt is een belangrijk feature de gegarandeerde ondersteuning voor verschillende browser(versies). Daarnaast maakt het framework gebruik van partial page rendering waarmee snelle responstijden gegarandeerd kunnen worden.

Conclusie

JSF is een belangrijke stap op weg naar het gestandaardiseerd, snel en efficiënt ontwikkelen van webapplicaties. De veelbelovende flexibiliteit en platformonafhankelijkheid blijft echter nog iets van de toekomst zolang er nog geen leveranciers zijn die al die UI component libraries en renderers leveren. Oracle heeft met zijn ADF Faces implementatie een eerste stap naar deze toekomst gezet.

Relevante Links

Waardering:
 
Tags:

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.