JavaServer Faces (JSF) est un framework Java standard pour la création d’interfaces utilisateur web basées sur des composants.
- Basé sur des composants UI : Permet de construire des interfaces riches avec des composants (
<h:inputText>,<h:commandButton>, etc.). - Séparation de la logique et de la présentation : Les vues sont définies en XHTML, et la logique métier est gérée via des Beans managés.
- Support des bibliothèques tierces : Peut être enrichi avec des frameworks comme PrimeFaces et RichFaces pour des interfaces plus modernes.
<h:form>
<h:outputLabel for="name" value="Nom :" />
<h:inputText id="name" value="#{userBean.name}" />
<h:commandButton value="Envoyer" action="#{userBean.submit}" />
</h:form>Comparaison JSF / JSP+servlet
Les deux code suivants sont identiques :
- le premier écrit avec JSF
- le second avec une JSP
JSF
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Liste des Utilisateurs</title>
</h:head>
<h:body>
<h1>Liste des Utilisateurs</h1>
<h:dataTable value="#{userBean.users}" var="user" border="1">
<h:column>
<f:facet name="header">Nom</f:facet>
#{user.name}
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
#{user.email}
</h:column>
</h:dataTable>
</h:body>
</html>h:dataTablecrée un tableau dynamique.value="#{userBean.users}"récupère la liste d’utilisateurs depuis le Bean managé.var="user"permet de boucler sur chaque utilisateur.
@ManagedBean
@RequestScoped
public class UserBean {
private List<User> users;
public UserBean() {
users = UserDAO.getUsers(); // charge une liste d'utilisateurs
}
public List<User> getUsers() {
return users;
}
}JSP + Servlet
Avec JSP et Servlets, nous devons :
- Récupérer la liste des utilisateurs dans un Servlet (
UserServlet). - Stocker la liste dans la requête avec
request.setAttribute("users", userList);. - Parcourir la liste avec une boucle for dans
users.jsp.
...
<table border="1">
<tr>
<th>Nom</th>
<th>Email</th>
</tr>
<%
List<User> users = (List<User>) request.getAttribute("users");
for (User user : users) {
%>
<tr>
<td><%= user.getName() %></td>
<td><%= user.getEmail() %></td>
</tr>
<%
}
%>
</table>@WebServlet("/users")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Récupérer la liste des utilisateurs depuis le modèle (UserDAO)
List<User> userList = UserDAO.getUsers();
// Ajouter la liste en tant qu'attribut de la requête
request.setAttribute("users", userList);
// Rediriger vers la JSP pour afficher les résultats
request.getRequestDispatcher("users.jsp").forward(request, response);
}
}MVC en JSF
JSF suit naturellement le pattern MVC, séparant :
- Modèle (Model) → Les Beans managés, qui contiennent les données et la logique métier.
- Vue (View) → Les pages XHTML, qui définissent l’interface utilisateur.
- Contrôleur (Controller) → Géré implicitement par JSF, en liant les actions de la vue aux Beans.
Résumé
-
En JSF
- L’affichage est déclaratif grâce à
h:dataTableet aux Beans managés. - Il n’y a pas besoin d’un Servlet pour gérer les requêtes.
- Il suffit de lier
#{userBean.users}à une liste dans le Bean.
- L’affichage est déclaratif grâce à
-
En JSP + Servlets
- Il faut manuellement gérer les requêtes et réponses via HttpServletRequest.
- L’affichage nécessite une boucle for en JSP.