Bonjour.
Je fais une appli web en JEE en utilisant Hibernate pour la persistance des données.
En simplifiant les chose, j'ai une classe "Users" :
et une classe "Fonction" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 @Entity@Table(name = "users", catalog = "expense_report") public class Users implements java.io.Serializable { private int idUser; private String userName; private String userFirstName; private String userEmail; private Boolean userIsactif; private Integer userInternalId; private String userCarName; private String userPhone; private String passWord; private Coefficients coeffocient; private Fonctions fonction; // Constructeur, Getter, Setter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Entity@Table(name = "fonctions", catalog = "expense_report") public class Fonctions implements java.io.Serializable { private int idFonction; private String fonctionName; private Set<Users> users; // Constructeur, Getter, Setter
J'ai donc bien sur deux tables en base de données pour ces deux classes.
Dans ma table "Users", j'ai un FK qui correspond à la PK de la table fonction.
Normalement, jusque la tout est OK.
Bien sur, j'ai un formulaire dans lequel j'ajoute un utilisateur à mon application.
Et le problème, est ici.
Pour attribuer une "Fonction" à mon "User", j'utilise une <select> (logique).
Quand je submit mon formulaire, toutes les infos sont bien remonté dans ma classe d'action mais la fonction de l'utilisateur n'est pas renseignée.
Mon HTML (j'utilise Struts2)
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
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 <form method="POST" action="AddUser"> <div class="form_user col-md-12"> <div class="col-md-6"> <div class="form-group"> <label for="userInternalId">Matricule</label> <input type="number" class="form-control" id="userInternalId" name="user.userInternalId" placeholder="Matricule"> </div> <div class="form-group"> <label for="userFonction">Fonction</label> <s:if test="%{ fonctions == null }"> <select class="form-control" id="selectFonction"> <option>Veuillez créer des fonctions utilisateur</option> </select> </s:if> <s:else> <s:select class = "form-control" id = "fonctions" list = "fonctions" listKey = "idFunction" listValue="fonctionName" headerKey="-1" headerValue="Selectionnez la fonction de l'utilisateur" name="fonction.idFonction"></s:select> </s:else> </div> <div class="form-group"> <label for="userName">Nom</label> <input type="text" class="form-control" id="userName" name="user.userName" placeholder="Nom"> </div> <div class="form-group"> <label for="userFirstName">Prénom</label> <input type="text" class="form-control" id="userFirstName" name="user.userFirstName" placeholder="Prénom"> </div> <div class="form-group"> <label for="userEmail">Adresse e-mail</label> <input type="email" class="form-control" id="userEmail" name="user.userEmail" aria-describedby="emailHelp" placeholder="e-mail"> </div> <div class="form-group"> <label for="userPhone">Téléphone</label> <input type="text" class="form-control" id="userPhone" name="user.userPhone" placeholder="Téléphone"> </div> </div> <div class="col-md-6"> <div class="form-group"> <label for="userCarName">Véhicule utilisé</label> <input type="text" class="form-control" id="userCarName" name="user.userCarName" placeholder="Véhicule utilisé"> </div> <div class="form-group"> <label for="userPowerCar">Nombre de chevaux fiscaux</label> <s:if test="%{ coefficients == null }"> <select class="form-control" id="exampleFormControlSelect1"> <option>Pas de résultat</option> </select> </s:if> <s:else> <s:select class = "form-control" id = "coefficients" list = "coefficients" listKey = "idCoefficient" listValue="titleCoefficient" headerKey="-1" headerValue="Selectionnez le type de véhicule" name="coefficient.idCoefficient"></s:select> </s:else> </div> <div class="form-group"> <label for="userKmsPrice">Prix au kilométre</label> <input type="text" class="form-control" id="userKmsPrice" placeholder="Prix au kilométre" readonly="readonly"> </div> <div class="form-group"> <label for="userMdp">Mot de passe</label> <input type="password" class="form-control" id="mdp" name="user.passWord" placeholder="Mot de passe"> </div> <div class="form-group"> <label for="userConfirmMdp">Confirmation du mot de passe</label> <input type="password" class="form-control" id="confirmMdp" placeholder="Confirmation du mot de passe"> </div> </div> </div> <button type="submit" class="btn btn-primary">Sauvegarder</button> </form>
Ma méthode dans ma classe d'action :
Dans ma base, tout est nikel sauf les FK (il y en a deux : "idFonction" et "idCoefficient") qui correspondent aux liste déroulante des tables "fonction" et "coefficient" des classes correspondante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public String RegisterUser() throws Exception { DAO<Users> userDao = DAOFactory.getUsersDao(); DAO<Fonctions> funcDao = DAOFactory.getFonctionsDao(); DAO<Coefficients> coefDao = DAOFactory.getCoefficientsDao(); Fonctions func = funcDao.find(fonction.getIdFonction()); Coefficients coeff = coefDao.find(coefficient.getIdCoefficient()); System.err.println("Fonction : " + func.getFonctionName()); // affichage en console pour voir info bien remontée user.setFunction(func); user.setCoeffocient(coeff); user.setUserIsactif(true); System.err.println("Fonction : " + user.getFonction().getFonctionName()); // affichage en console pour voir info bien attribuée à mon utilisateur userDao.create(user); // Enregistrement en base de mon utilisateur return SUCCESS; }
Je sais pas si je me suis bien expliqué donc, n'hésitez pas à demander plus de précision et explications.
Merci d'avance pour votre aide (je suis sur que c'est un truc tout con que j'ai zappé de faire ^^).
Partager