Java EE (JPA) : Echec d'insertion d'enregistrement dans la base de données postgresql
Bonjour à tous,
Je rencontre actuellement une difficulté qui me pourrit l'existence.
Je me suis mis récemment à la technologie Java EE et après lu de long en large le tuto de Coyote, j'ai décider de bosser sur un cas pratique.
Voilà lorsque j'essaie d'insérer un enregistrement dans la base de données (postgresql), elle n'est pas effectuée et aucune erreur ne s'affiche dans la console.
J'utilise le serveur d'application GlassFish Application Server 3.1 Servlet 3.0.
Ci dessous les codes de mes servlets et de mes JSP.
Merci de bien vouloir m'aider à localiser où se trouve(nt) le(s) erreur(s).
Code de l'entité Ville
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| package com.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="ville")
public class Ville {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_ville")
private Long idVille;
@Column(name="libelle_ville")
private String libelleVille;
@ManyToOne
@JoinColumn(name="id_departement")
private Departement departement;
public Long getIdVille() {
return idVille;
}
public void setIdVille(Long idVille) {
this.idVille = idVille;
}
public String getLibelleVille() {
return libelleVille;
}
public void setLibelleVille(String libelleVille) {
this.libelleVille = libelleVille;
}
public Departement getDepartement() {
return departement;
}
public void setDepartement(Departement departement) {
this.departement = departement;
}
@Override
public String toString() {
return "Ville [idVille=" + idVille + ", libelleVille=" + libelleVille
+ ", departement=" + departement + "]";
}
} |
Code du DAO VilleDao
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
package com.dao;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import com.entities.Ville;
import com.entities.Departement;
@Stateless
public class VilleDao {
private static final String JPQL_SELECTIONNER_VILLE = "SELECT v FROM Ville v ORDER BY v.libelleVille ASC";
private static final String JPQL_SELECTIONNER_VILLE_PAR_LIBELLE = "SELECT v FROM Ville v WHERE v.libelleVille = :libelleVille";
private static final String JPQL_MODIFIER_VILLE = "UPDATE Ville v SET v.departement = :departement, v.libelleVille = :libelleVille WHERE v.idVille = :idVille";
private static final String PARAM_DEPARTEMENT = "departement";
private static final String PARAM_ID_VILLE = "idVille";
private static final String PARAM_LIBELLE_VILLE = "libelleVille";
@PersistenceContext(unitName="bdd_gestion_objets_voles_ou_perdus_PU")
private EntityManager em;
public void creer(Ville ville) throws DaoException{
try{
em.persist(ville);
}catch(Exception e){
throw new DaoException(e);
}
}
public List<Ville> selectionner() throws DaoException{
try{
TypedQuery<Ville> query = em.createQuery(JPQL_SELECTIONNER_VILLE, Ville.class);
return query.getResultList();
}catch(Exception e){
throw new DaoException(e);
}
}
public Ville selectionner(Long idVille) throws DaoException{
try{
return em.find(Ville.class, idVille);
}catch(Exception e){
throw new DaoException(e);
}
}
public Ville selectionner(String libelleVille) throws DaoException{
Ville ville = null;
Query query = em.createQuery(JPQL_SELECTIONNER_VILLE_PAR_LIBELLE);
query.setParameter(PARAM_LIBELLE_VILLE, libelleVille);
try{
ville = (Ville)query.getSingleResult();
}catch(NoResultException e){
return null;
}catch(Exception e){
throw new DaoException(e);
}
return ville;
}
public void modifier(Long idVille, String libelleVille, Departement departement) throws DaoException{
try{
Query query = em.createQuery(JPQL_MODIFIER_VILLE);
query.setParameter(PARAM_DEPARTEMENT, departement);
query.setParameter(PARAM_ID_VILLE, idVille);
query.setParameter(PARAM_LIBELLE_VILLE, libelleVille);
}catch(Exception e){
throw new DaoException(e);
}
}
public void supprimer(Ville ville) throws DaoException{
try{
em.remove(em.merge(ville));
}catch(Exception e){
throw new DaoException(e);
}
}
} |
Code de l'objet métier VilleForm
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| package com.forms;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.EJB;
import javax.servlet.http.HttpServletRequest;
import com.dao.DepartementDao;
import com.dao.VilleDao;
import com.entities.Departement;
import com.entities.Ville;
public class VilleForm {
private static final String CHAMP_ID_VILLE = "idVills";
private static final String CHAMP_LIBELLE_VILLE = "libelleVille";
private static final String COMBO_BOX_ID_DEPARTEMENT = "idDepartement";
private String resultat;
private Map<String, String> erreur = new HashMap<String, String>();
@EJB
private VilleDao villeDao;
@EJB
private DepartementDao departementDao;
public VilleForm(VilleDao villeDao, DepartementDao departementDao){
this.villeDao = villeDao;
this.departementDao = departementDao;
}
public String getResultat() {
return resultat;
}
public void setResultat(String resultat) {
this.resultat = resultat;
}
public Map<String, String> getErreur() {
return erreur;
}
public void setErreur(String nomChamp, String message) {
erreur.put(nomChamp, message);
}
public Ville EnregistrerVille(HttpServletRequest request){
String paramLibelleVille = getValeurChamp(request, CHAMP_LIBELLE_VILLE);
String paramIdDepartement = getValeurChamp(request, COMBO_BOX_ID_DEPARTEMENT);
Ville ville = new Ville();
try{
validationChampLibelleVille(paramLibelleVille);
}catch(FormValidationException e){
setErreur(CHAMP_LIBELLE_VILLE, e.getMessage());
}
ville.setLibelleVille(paramLibelleVille);
try{
validationComboBoxDepartement(paramIdDepartement);
}catch(FormValidationException e){
setErreur(COMBO_BOX_ID_DEPARTEMENT, e.getMessage());
}
Departement departement = departementDao.selectionner(paramIdDepartement);
ville.setDepartement(departement);
if(erreur.isEmpty()){
villeDao.creer(ville);
resultat="Ville enregistrée avec succès.";
}else{
resultat="Echec d'enregistrement de la ville.";
}
return ville;
}
public Ville ModifierVille(HttpServletRequest request){
String paramIdVille = getValeurChamp(request, CHAMP_ID_VILLE);
String paramLibelleVille = getValeurChamp(request, CHAMP_LIBELLE_VILLE);
String paramIdDepartement = getValeurChamp(request, COMBO_BOX_ID_DEPARTEMENT);
Ville ville = new Ville();
try{
validationChampLibelleVille(paramLibelleVille);
}catch(FormValidationException e){
setErreur(CHAMP_LIBELLE_VILLE, e.getMessage());
}
ville.setLibelleVille(paramLibelleVille);
try{
validationComboBoxDepartement(paramIdDepartement);
}catch(FormValidationException e){
setErreur(COMBO_BOX_ID_DEPARTEMENT, e.getMessage());
}
ville.setDepartement(departementDao.selectionner(paramIdDepartement));
if(erreur.isEmpty()){
villeDao.modifier(Long.parseLong(paramIdVille),paramLibelleVille, departementDao.selectionner(paramIdDepartement));
resultat="Ville modifiée avec succès.";
}else{
resultat="Echec de la modification de la ville.";
}
return ville;
}
private String getValeurChamp(HttpServletRequest request, String nomChamp){
String valeurChamp = request.getParameter(nomChamp);
if(valeurChamp == null || valeurChamp.trim().length() == 0){
return null;
}else{
return valeurChamp.trim();
}
}
private void validationChampLibelleVille(String libelleVille) throws FormValidationException{
if(libelleVille == null || libelleVille.trim().length() == 0){
throw new FormValidationException("Erreur : veuillez saisir le libellé de la ville.");
}else if(villeDao.selectionner(libelleVille) != null){
throw new FormValidationException("Erreur : La ville saisie existe déjà dans la base.");
}
}
private void validationComboBoxDepartement(String departement) throws FormValidationException{
if(departement == null || departement.trim().length() == 0){
throw new FormValidationException("Erreur : veuillez saisir le libellé de la ville.");
}
}
} |
Code de la servlet EnregistrerVille.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| package com.servlets;
import java.io.IOException;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import com.dao.DepartementDao;
import com.dao.VilleDao;
import com.entities.Departement;
import com.entities.Ville;
import com.forms.VilleForm;
@WebServlet("/enregistrerville")
public class EnregistrerVille extends HttpServlet {
private static final long serialVersionUID = -8823747358928721105L;
private static final String ATTRIBUT_FORM = "form";
private static final String ATTRIBUT_DEPARTEMENT = "departement";
private static final String ATTRIBUT_VILLE = "ville";
private static final String VUE_AFFICHER_VILLE = "/afficherville";
private static final String VUE_ENREGISTRER_VILLE = "/WEB-INF/enregistrerville.jsp";
@EJB
private VilleDao villeDao;
@EJB
private DepartementDao departementDao;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
List<Departement> listeDepartement = departementDao.selectionner();
request.setAttribute(ATTRIBUT_DEPARTEMENT, listeDepartement);
this.getServletContext().getRequestDispatcher(VUE_ENREGISTRER_VILLE).forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
VilleForm form = new VilleForm(villeDao, departementDao);
Ville ville = form.EnregistrerVille(request);
List<Departement> listeDepartement = departementDao.selectionner();
request.setAttribute(ATTRIBUT_DEPARTEMENT, listeDepartement);
request.setAttribute(ATTRIBUT_FORM, form);
request.setAttribute(ATTRIBUT_VILLE, ville);
if(form.getErreur().isEmpty()){
response.sendRedirect(request.getContextPath()+VUE_AFFICHER_VILLE);
}else{
this.getServletContext().getRequestDispatcher(VUE_ENREGISTRER_VILLE).forward(request, response);
}
}
} |
Code de la JSP enregistrerville.jps
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Enregistrer Ville</title>
<link rel="stylesheet" type="text/css" href="<c:url value="/inc/style.css"/>"/>
</head>
<body>
<form action="enregistrerville" method="post">
<label for="libelleVille">Libellé <span class="requis">*</span></label>
<input type="text" id="libelleVille" name="libelleVille" value="<c:out value="${ville.libelleVille}"/>" size="50" maxlength="250" /><span class="erreur"><c:out value="${form.erreur['libelleVille']}"/></span><br/>
<label for="departement">Département <span class="requis">*</span></label>
<select id="departement" name="departement">
<c:forEach items="${departement}" var="vardepartement">
<option value="<c:out value="${vardepartement.idDepartement}"/>"><c:out value="${vardepartement.libelleDepartement}"/></option>
</c:forEach>
</select><span class="erreur"><c:out value="${form.erreur['departement']}"/></span><br/>
<input type="submit" name="btnEnregistrer" value="Enregistrer" class="sansLabel">
</form>
<p class="${empty form.erreur ? 'succes' : 'erreur'}"><c:out value="${form.resultat}"/></p>
<p><c:out value="${ville.departement}"/></p>
</body>
</html> |
Code de l'objet FormValidationException
Code:
1 2 3 4 5 6 7 8 9 10 11
| package com.forms;
public class FormValidationException extends RuntimeException {
private static final long serialVersionUID = -3658562644472863641L;
public FormValidationException(String message){
super(message);
}
} |