Accéder au contenu principal

Atelier JSF JDBC

Introduction

Dans cet atelier, nous allons utiliser conjointement la technologie Jsf au niveau de la couche web tandis que la connexion JDBC à la base de données va être effectuée via la couche bean. Le projet travaille sur la base de données derby “transport” qui possède une seule table “voiture” composée des champs suivants : immatriculation, marque, nbportes, couleur. Nous essayons d'élaborer uniquement l'opération d'affichage des tuples de la table "Voiture". L’architecture du projet est ainsi élaborée sous l’IDE NetBeans 8.2 :

Architecture du projet JSF
Architecture du projet


La couche Métier

La couche métier de notre projet se constitue d'une seule entité, à savoir la classe "Voiture" que l'on va créer au niveau du package 'org.cours.jsf'.

Voiture.java

package org.cours.jsf;
public class Voiture {
    private String immatriculation;
    private String marque;
    private int nbPortes;
    private String couleur;
    public Voiture() {
    }
    public String getImmatriculation() {
        return immatriculation;
    }
    public void setImmatriculation(String immatriculation) {
        this.immatriculation = immatriculation;
    }
    public String getMarque() {
        return marque;
    }
    public void setMarque(String marque) {
        this.marque = marque;
    }
    public int getNbPortes() {
        return nbPortes;
    }
    public void setNbPortes(int nbPortes) {
        this.nbPortes = nbPortes;
    }
    public String getCouleur() {
        return couleur;
    }
    public void setCouleur(String couleur) {
        this.couleur = couleur;
    }  
}

La couche Bean

La classe qui va assurer les opérations d'interaction avec la base de données sera assurée par la classe de type ManagedBean "VoitureBean" et qui va en même temps jouer le rôle de relais avec à la fois la page jsf "voiture.xhtml" ainsi que la classe entité "Voiture.java". Cette classe est crée dans le package 'org.cours.jsf'.


VoitureBean.java

package org.cours.jsf;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class VoitureBean {

    public List<Voiture> getVoiture() throws ClassNotFoundException, SQLException {
        Connection connect = null;
        String url = "jdbc:derby://localhost:1527/transport";
        String username = "root";
        String password = "azerty";
        try {

            Class.forName("org.apache.derby.jdbc.ClientDriver");

            connect = DriverManager.getConnection(url, username, password);

        } catch (SQLException ex) {
            System.out.println("in exec");
            System.out.println(ex.getMessage());
        }
        List<Voiture> voitures = new ArrayList<>();
        PreparedStatement pstmt = connect.prepareStatement("select immatriculation, marque, nbportes, couleur from Voiture");
        ResultSet rs = pstmt.executeQuery();
        while (rs.next()) {
            Voiture voiture = new Voiture();
            voiture.setImmatriculation(rs.getString("immatriculation"));
            voiture.setMarque(rs.getString("marque"));
            voiture.setNbPortes(rs.getInt("nbportes"));
            voiture.setCouleur(rs.getString("couleur"));
            voitures.add(voiture);
        }
        rs.close();
        pstmt.close();
        connect.close();
        return voitures;
    }
}


La couche Web

La page Jsf "voiture.xhtml" va faire appel au tag 'dataTable' pour pouvoir afficher les éléments de la structure de table 'Voiture' de la base de données 'transport'. Les données étant chargées depuis la 'ManagedBean' en passant par l'entité "Voiture".

Voiture.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
    <h2>Liste des Voitures</h2>
        <h:dataTable bgcolor="cyan" value="#{voitureBean.voiture}" var="voiture" border="2">
        <h:column>
            <f:facet name="header">Immatriculation</f:facet>
         #{voiture.immatriculation}
      </h:column>
        <h:column>
            <f:facet name="header">Marque</f:facet>
         #{voiture.marque}
      </h:column>
        <h:column>
            <f:facet name="header">Nombre portes</f:facet>
           #{voiture.nbPortes}
       </h:column>
        <h:column>
            <f:facet name="header">Couleur</f:facet>
           #{voiture.couleur}
       </h:column>    
    </h:dataTable>
</h:body>
</html>

Le rendu

On lance l’exécution de la page jsf “voiture.xhtml” en faisant bouton droit sur cette page et en choisissant après “Exécuter le fichier”, on obtiendra le rendu suivant :



Rendu de la page voiture.xhtml
Affichage de la page Voiture.xhtml



Commentaires

Posts les plus consultés de ce blog

Rédaction d'un document Cahier des Charges

Comment rédiger un Cahier des Charges Pour rédiger un document cahier des charges d'un projet logiciel ou autre, nous proposons cette template qui pourrait servir éventuellement comme guide. Il s'agit de définir successivement les points suivants : Contexte et définition du projet, Objectifs, Scope, Parties Prenantes, Description des besoins à répartir entre les besoins fonctionnels et non fonctionnels. Contexte et définition du problème Dans cette rubrique, vous allez définir le problème pour bien clarifier la finalité du travail.  Il est important de souligner aussi les besoins ainsi que les contraintes et ce de manière  très sommaire. Par exemple, vous pouvez exposer la situation actuelle ou futur de votre système tout en mettant l’accent sur les problèmes auxquels vous voulez faire face. Objectifs Après avoir exposé le problème dans la première partie, ici vous allez exprimer quelles sont les attentes et les résultats escomptés. Normalement ces at...

Ateliers de Génie Logiciel 2019-2020

Ateliers de Génie Logiciel Sommaire de gestion Objectif Les ateliers de génie logiciel constituent un atout majeur pour les élèves ingénieurs ou étudiants inscrits dans des filières IT et qui suivent le cours de Génie Logiciel. Ils correspondent à diverses technologies dans le domaine de l’industrie du logiciel et permettent de compléter la formation par rapport surtout aux aspects pratiques. Cela pourrait représenter la boîte à outils indispensable pour n’importe quel ingénieur de logiciel. Nous tenons à travers ces ateliers à consolider les savoirs en matière de technologie logicielle d’une part et doter chaque élève ou étudiant des outils nécessaires pour bien accomplir ses tâches et savoir choisir la technologie appropriée et adaptée au contexte d’autre part.  Buts Nous visons à cerner toutes les facettes technologiques liées au développement du logiciel selon les normes requises et en respectant les bonnes pratiques en la matière. Ces ateliers sont basés sur...

Guide pour élaborer un Projet Logiciel

 Introduction Les étudiants dans les filières IT et spécialement ceux qui suivent un cursus Génie Logiciel (GL) sont toujours appelés à réaliser des projets logiciels que se soit sous la forme de projets tutorés ou dans le cadre des projets logiciels de fin d'année ou de fin d'études. Ces étudiants souvent sont mal accompagnés pour bien dérouler leur projet. C'est dans ce contexte que j'ai essayé de réaliser ce guide qui va permettre aux étudiants des filières IT de savoir mener un projet GL. Ce guide présente les étapes nécessaires ainsi que les outils indispensables pour ce faire. L'ensemble des étapes est présenté de manière linéaire. Présentation du Projet Avant de commencer, l'étudiant doit absolument présenter le contexte et la raison d'être de son projet. Il doit insister à bien clarifier la problématique, la vision, le scope du projet ainsi que le modèle de cycle de vie approprié qu'il souhaite adopter. Si il souhaite adopter un processus agile, ...