Application de gestion des etudiants  ب jsf الجزء الأول

imadbelasri Java
JA

فهاد الدرس الجديد من سلسلة الجافا غادي نشوفو كيفاش نقادو une application لي كتدير la gestion des étudiants بإستعمال jsf يلا مكنتيش كتعرف شنو هي jsf شوف هاد الدرس السابق من هنا
l'application ديالنا كتمكن من إضافة طلاب لقاعدة البيانات المستخدم يمكنلو يعدل او يمسح طالب اختارو دائما باستعمال jsf.


نظرة سريعة بالفيديو


1- إنشاء قاعدة البيانات

أول حاجة غادي تدير غادي ت télécharger eclipse من هنا منبعد غادي ت télécharger tomcat من هنا من بعد غادي télécharger mysql من هنا  اختار
 (mysql-installer-web-community-5.7.19.0.msi) 
 من بعد مت installer  كلشي غادي تفتح eclipse من بعد تزيد project جديد اختار Dynamic Web Project  سميه لي بغيتي من بعد غادي ت télécharger هاد ل les libs
javax.faces-2.2.8.jar من هنا و mysql connector من هنا من بعد متحملها غادي تزيدها فالمجلد lib لي غادي تلقاه ف
WebContent->WEB-INF
من بعد غادي  تمشي ل
MySQL Workbench من بعد ما تفتحو غادي ت executer ل query لي غادي تمكن من إضافة مستخدم جديد كيف مبين فالكود الأول عطيناه username darija ول mot de passe darija وعطيناه جميع الصلاحيات من بعد غادي ن executer ل query لي غادي تمكن من إضافة قاعدة البيانات ديالي لي سميتها students وكنزيد فيها طلاب انا خليت les champs فارغين يمكنلك تعمرهم بلي بغيتي الكود ديال الملف هو:

                                                    
                                                        //create user
CREATE USER 'darija'@'localhost' IDENTIFIED BY 'darija';
GRANT ALL PRIVILEGES ON * . * TO 'darija'@'localhost';

//create database 

CREATE DATABASE  IF NOT EXISTS `students` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `students`;

DROP TABLE IF EXISTS `students`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) DEFAULT NULL,
  `last_name` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

INSERT INTO `student` VALUES (1,'','',''),(2,'','',''),(3,'','','');
                                                    
                                                

2- الملف context.xml

من بعد غادي تمشي للمجلد WebContent->META-INF
غادي تزيد فيه ملف جديد سميه context.xml فيه زدنا الكود لي كيقول ل tomcat كيفاش يتكونيكطا لقاعدة البيانات لي زدنا فكنعطيوه ل username لي زدنا ول mot de passe والرابط لقاعدة البيانات الكود ديال الملف هو:

                                                        
                                                            <Context>

  <Resource name="jdbc/students" 
  			auth="Container" type="javax.sql.DataSource"
               maxActive="20" maxIdle="5" maxWait="10000"
               username="darija" password="darija" 
               driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/students"/>

</Context>
                                                        
                                                    

3- الملف web.xml

من بعد غادي تمشي للمجلد WebContent->WEB-INF
غادي تلقا فيه ملف سميتو web.xml فيه زدنا الكود لي كي référencer ل configuration ديال connexion لقاعدة البيانات لي زدنا فالملف context.xml الكود لي غادي تزيد فالملف هو:

                                                        
                                                              <resource-ref>
    <description>Student Datasource</description>
    <res-ref-name>jdbc/students</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
                                                        
                                                    

4- الملف Student.java

من بعد غادي تمشي للمجلد Java Resources->src
غادي تزيد package جديد سميه لي بغيتي من بعد زيد فيه ملف سميه Student.java فيه كاين المعلومات الخاصة بكل طالب على شكل des variables بالإضافة لل constructeur ل getters و setters هو:

                                                        
                                                            package com.darija.coding.jsf.jdbc;

import javax.faces.bean.ManagedBean;

@ManagedBean
public class Student {

	private int id;
	private String nom;
	private String prenom;
	private String filiere;
	
	public Student() {
	}
	
	public Student(int id, String nom, String prenom, String filiere) {
		this.id = id;
		this.nom = nom;
		this.prenom = prenom;
		this.filiere = filiere;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	
	public String getNom() {
		return nom;
	}

	public void setNom(String nom) {
		this.nom = nom;
	}

	public String getPrenom() {
		return prenom;
	}

	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}

	public String getFiliere() {
		return filiere;
	}

	public void setFiliere(String filiere) {
		this.filiere = filiere;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", nom=" + nom + ", prenom="
				+ prenom + ", filiere=" + filiere + "]";
	}

}


                                                        
                                                    

5- الملف StudentDb.java

فنفس المجلد كانزيد ملف جديد كنسميه StudentDb.java فيه كنعيط ل connexion لي déja درتلها ل configuration منبعد عندي ل fonction getStd  لي كنسترجع بها الطلاب من قاعدة البيانات وكنزيدهم فل list students منبعد عندي addStu لي كتزيد طالب فقاعدة البيانات من بعد مكنستقبلوه من الفورم لي غادي نزيدو من بعد ثم getStu لي كنسترجع بها طالب بل id ديالو من بعد كاين updateStu  لي كتعدل المعلومات ديال طالب فقاعدة البيانات من بعد مكنستقبلوه من الفورم لي غادي نزيدو من بعد ثم كاين deleteStu لي كتمسح طالب اختارو المستخدم بل id ديالو الكود ديال الملف هو:

                                                        
                                                            package com.darija.coding.jsf.jdbc;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class StudentDb {

	private static StudentDb instance;
	private DataSource dataSource;
	private String jndiName = "java:comp/env/jdbc/students";
	
	public static StudentDb getInstance() throws Exception {
		if (instance == null) {
			instance = new StudentDb();
		}
		
		return instance;
	}
	
	private StudentDb() throws Exception {		
		dataSource = getDataSource();
	}

	private DataSource getDataSource() throws NamingException {
		Context context = new InitialContext();
		DataSource dataSource = (DataSource) context.lookup(jndiName);
		return dataSource;
	}
		
	public List<Student> getStd() throws Exception {

		List<Student> students = new ArrayList<>();

		Connection Conn = null;
		Statement Stmt = null;
		ResultSet Rs = null;
		
		try {
			Conn = getConnection();

			String sql = "select * from student order by nom";

			Stmt = Conn.createStatement();

			Rs = Stmt.executeQuery(sql);

			// process result set
			while (Rs.next()) {
				
				// retrieve data from result set row
				int id = Rs.getInt("id");
				String nom = Rs.getString("nom");
				String prenom = Rs.getString("prenom");
				String filiere = Rs.getString("filiere");

				// create new student object
				Student student = new Student(id, nom, prenom,
						filiere);

				// add it to the list of students
				students.add(student);
			}
			
			return students;		
		}
		finally {
			close (Conn,Stmt,Rs);
		}
	}
	public void addStu(Student student) throws Exception {
		Connection Conn = null;
		PreparedStatement Stmt = null;
		try {
			Conn = getConnection();
			String sql = "insert into student (nom, prenom, filiere) values (?, ?, ?)";
			Stmt = Conn.prepareStatement(sql);

			// set params
			Stmt.setString(1, student.getNom());
			Stmt.setString(2, student.getPrenom());
			Stmt.setString(3, student.getFiliere());
			Stmt.execute();			
		}
		finally {
			close (Conn,Stmt);
		}	
	}
	public Student getStu(int student_id) throws Exception {
	
		Connection Conn = null;
		PreparedStatement Stmt = null;
		ResultSet Rs = null;
		
		try {
			
			Conn = getConnection();
			
			String sql = "select * from student where id=?";
			
			Stmt = Conn.prepareStatement(sql);
			
			// set params
			Stmt.setInt(1,student_id);
			Rs = Stmt.executeQuery();
			
			Student student = null;
			
			// retrieve data from result set row
			if (Rs.next()) {
				int id = Rs.getInt("id");
				String nom = Rs.getString("nom");
				String prenom = Rs.getString("prenom");
				String filiere = Rs.getString("filiere");

				student = new Student(id, nom, prenom,
						filiere);
			}
			else {
				throw new Exception("Etudiant introuvable avec l'id suivant : " + student_id);
			}

			return student;
		}
		finally {
			close (Conn, Stmt, Rs);
		}
	}
	
	public void updateStu(Student student) throws Exception {

		Connection Conn = null;
		PreparedStatement Stmt = null;

		try {
			Conn = getConnection();
			String sql = "update student "
						+ " set nom=?, prenom=?, filiere=?"
						+ " where id=?";
			Stmt = Conn.prepareStatement(sql);
			Stmt.setString(1, student.getNom());
			Stmt.setString(2, student.getPrenom());
			Stmt.setString(3, student.getFiliere());
			Stmt.setInt(4, student.getId());
			
			Stmt.execute();
		}
		finally {
			close (Conn,Stmt);
		}
		
	}
	
	public void deleteStu(int id) throws Exception {

		Connection Conn = null;
		PreparedStatement Stmt = null;

		try {
			Conn = getConnection();

			String sql = "delete from student where id=?";

			Stmt = Conn.prepareStatement(sql);

			// set params
			Stmt.setInt(1,id);
			
			Stmt.execute();
		}
		finally {
			close (Conn,Stmt);
		}		
	}	
	
	private Connection getConnection() throws Exception {
		Connection theConn = dataSource.getConnection();
		return theConn;
	}
	
	private void close(Connection Conn, Statement Stmt) {
		close(Conn, Stmt, null);
	}
	
	private void close(Connection Conn, Statement Stmt, ResultSet Rs) {

		try {
			if (Rs != null) {
				Rs.close();
			}

			if (Stmt != null) {
				Stmt.close();
			}

			if (Conn != null) {
				Conn.close();
			}
			
		} catch (Exception exc) {
			exc.printStackTrace();
		}
	}	
}