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" :
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
et une classe "Fonction" :
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 :
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;
	}
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.

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 ^^).