Een java server face (JSF) is een Java-webframework waarmee je dynamische en componentgebaseerde gebruikersinterfaces bouwt voor webapplicaties. Tegenwoordig staat het officieel bekend als Jakarta Faces. Het framework maakt gebruik van herbruikbare UI-componenten, beheert de status van de applicatie en verbindt de interface via Contexts and Dependency Injection (CDI) met de serverlogica. In 2026 draait de actuele versie op Jakarta Faces 4.1, onderdeel van de Jakarta EE 11-release, met verbeterde ondersteuning voor moderne Java-versies zoals Java 21.
Wat is Java Server Face (Jakarta Faces)?
Java Server Face is oorspronkelijk ontwikkeld door Sun Microsystems en later overgedragen aan de Eclipse Foundation. Het is een Model-View-Controller (MVC) framework voor server-side rendering. Dit betekent dat de server de webpagina opbouwt voordat deze naar de browser van de gebruiker wordt gestuurd.
Waar moderne frameworks zoals React of Angular de interface in de browser (client-side) genereren, houdt JSF de logica en de status van de componenten op de server. Dit maakt het bijzonder geschikt voor zware zakelijke en administratieve applicaties waar veiligheid en dataconsistentie centraal staan.
De naamswijziging naar Jakarta Faces
Sinds de overdracht van Java EE naar de Eclipse Foundation in 2017, mocht de merknaam ‘Java’ niet meer gebruikt worden voor deze specificaties. Hierdoor is de officiële naam veranderd. Hoewel veel ontwikkelaars in de praktijk nog steeds zoeken naar een java server face of JSF, is de officiële term sinds versie 3.0 Jakarta Faces. In 2026 werken we inmiddels met Jakarta Faces 4.1 (en is versie 5.0 in ontwikkeling voor Jakarta EE 12).
Hoe werkt het componentgebaseerde model?
Een van de belangrijkste kenmerken van een java server face is de modulaire opbouw. Je bouwt een webpagina niet door ruwe HTML te schrijven, maar door XML-tags te gebruiken die verwijzen naar Java-componenten.
Deze componenten variëren van simpele tekstvakken en knoppen tot complexe datatabellen en kalenders. Het framework vertaalt deze XML-tags (meestal geschreven in Facelets, de standaard view-technologie voor JSF) automatisch naar standaard HTML, CSS en JavaScript die de browser begrijpt.
Voordelen van dit model
- Herbruikbaarheid: Je kunt een component eenmaal definiëren en overal in je applicatie [INTERNAL:java-applicatie-beveiliging] hergebruiken.
- Onderhoudbaarheid: Wijzigingen in een component worden direct overal doorgevoerd waar het component wordt gebruikt.
- Minder boilerplate-code: Ontwikkelaars hoeven zich minder bezig te houden met het schrijven van repetitieve HTML en JavaScript.
Managed Beans en CDI in 2026
Om de gebruikersinterface interactief te maken, moet deze communiceren met de achterliggende logica. In oudere versies van JSF gebeurde dit via Managed Beans. In 2026 (vanaf Jakarta EE 10 en verder in EE 11) zijn de originele JSF Managed Beans echter volledig uitgefaseerd ten gunste van CDI (Contexts and Dependency Injection).
CDI is de moderne standaard binnen Jakarta EE. Een CDI-bean is een eenvoudige Java-klasse die is geannoteerd, bijvoorbeeld met @Named en @RequestScoped. Deze klasse bevat de data (het model) en de acties (de methodes) die door de webpagina worden aangeroepen.
Voorbeeld van een moderne Bean
Wanneer een gebruiker op een knop klikt in de interface, stuurt de java server face een verzoek naar de server. Het framework zoekt de bijbehorende CDI-bean, werkt de waarden bij en voert de gekoppelde methode uit. Vervolgens wordt de pagina (of een deel ervan via AJAX) opnieuw gerenderd met de nieuwe data.
Java Server Face instellen (Stap-voor-stap)
Het opzetten van een nieuw project met Jakarta Faces 4.1 is in 2026 relatief eenvoudig als je gebruikmaakt van een moderne applicatieserver zoals Eclipse GlassFish of Payara Server.
Stap 1: Projectconfiguratie (Maven)
Zorg ervoor dat je build-tool, zoals Maven, de juiste afhankelijkheden bevat. Voeg de Jakarta EE 11 Web Profile dependency toe aan je pom.xml:
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-web-api</artifactId>
<version>11.0.0</version>
<scope>provided</scope>
</dependency>
Stap 2: De faces-config.xml
Hoewel veel configuratie tegenwoordig via annotaties gaat, is een faces-config.xml in de WEB-INF map vaak nog nodig om de applicatie te activeren of specifieke instellingen te definiëren.
Stap 3: Een Facelet-pagina maken
Maak een bestand genaamd index.xhtml. Gebruik de juiste namespaces voor Jakarta Faces:
xmlns:h="jakarta.faces.html"
Met de <h:form> en <h:commandButton> tags kun je direct interactieve elementen toevoegen die communiceren met je CDI-beans.
Vergelijking: JSF vs. Moderne Alternatieven
Hoewel java server face nog steeds veel wordt gebruikt in enterprise-omgevingen, is het belangrijk om te weten hoe het zich verhoudt tot andere populaire frameworks in 2026.
| Framework | Architectuur | Leercurve | Beste Toepassing (2026) |
|---|---|---|---|
| Jakarta Faces (JSF) | Server-side MVC | Gemiddeld | Interne enterprise applicaties, administratiesystemen |
| Spring Boot + Thymeleaf | Server-side MVC | Laag tot Gemiddeld | Snelle webapplicaties, microservices [INTERNAL:microservices-architectuur] |
| React / Angular | Client-side SPA | Hoog | Publieke websites, highly interactive web-apps |
Veelgemaakte fouten bij JSF-ontwikkeling
Ontwikkelaars die nieuw zijn met java server face lopen vaak tegen specifieke problemen aan. Hier zijn de meest voorkomende valkuilen in 2026:
- Verkeerde scope kiezen: Het gebruik van
@SessionScopedwaar@ViewScopedof@RequestScopedvoldoende is. Dit leidt tot een hoog geheugengebruik op de server. - Oude namespaces gebruiken: Het per ongeluk gebruiken van de oude
xmlns:h="http://xmlns.jcp.org/jsf/html"in plaats van de nieuwejakarta.faces.*namespaces. De oude namespaces werken niet meer in Jakarta EE 11. - Te grote component trees: Het bouwen van extreem complexe pagina’s met honderden componenten. Dit vertraagt de server-side rendering aanzienlijk.
Veelgestelde vragen
Wat is het verschil tussen Java Server Face en JSP?
JavaServer Pages (JSP) is een oudere technologie waarbij Java-code direct in de HTML werd geschreven. Een java server face gebruikt een componentgebaseerd model met Facelets (XML), wat zorgt voor een veel schonere scheiding tussen logica en weergave.
Wordt JSF in 2026 nog veel gebruikt?
Ja, vooral in grote, bestaande enterprise-omgevingen (zoals banken en overheidsinstanties). Voor compleet nieuwe, publieke projecten wordt tegenwoordig vaker gekozen voor een combinatie van een REST API (bijv. via Spring Boot of Jakarta REST) met een frontend-framework zoals React of Vue.
Welke Java-versie heb ik nodig voor Jakarta Faces 4.1?
Jakarta Faces 4.1, onderdeel van de Jakarta EE 11 release in 2025/2026, vereist minimaal Java 17, maar is sterk geoptimaliseerd voor Java 21 (de huidige LTS-versie).
Wat is PrimeFaces?
PrimeFaces is een populaire open-source bibliotheek die bovenop JSF draait. Het biedt honderden kant-en-klare, visueel aantrekkelijke componenten (zoals grafieken, geavanceerde tabellen en dialogen) waardoor je veel sneller een professionele interface kunt bouwen.
Hoe los ik een ViewExpiredException op?
Een ViewExpiredException treedt op wanneer de server de status van de pagina niet meer kent, bijvoorbeeld omdat de sessie is verlopen of de server is herstart. Je kunt dit oplossen door de fout netjes af te vangen in een ExceptionHandler en de gebruiker om te leiden naar de inlogpagina of de homepage.
