Jsf ejb dao [Résolu]

Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
- - Dernière réponse : kerfahi
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
- 28 févr. 2012 à 16:27
bonjour,
je veux savoir comment faire une page jsf pour enregistrer "personne" et "adresse" en même temps .est ce que je doit faire class controller pour chaque entite(personne,adress)???
RQ:personne peut avoir plusieur adresse.
je peut enregister personne seul dans la base avec la page jsp
mon problem comment lié pour avoir une seul page qui contient en même temps adresse et personne?????

merci
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
3
Merci
Il ne faut pas avoir deux managedBean, sinon, tu as ce genre de problème. et il n'y a pas de solution...

Merci cs_Julien39 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
Bonjour,

Normalement, si tu codes proprement, dans ton managedBean, tu n'as pas d'objet personne et tu n'as pas d'objet adresse.

Tu n'as que des String ou des int qui te serviront ensuite à pour créer ces objets.

Tu as également UN controleur sur ta page (éventuellement deux si tu as un composant de gestion unifié des droits ou ce genre de choses).

Quand l'utilisateur valide le formulaire, tu appelles la méthode du controleur en lui passant le managedBean en paramètre. Et là, c'est le controleur qui récupère toutes les informations du managedBean pour créer tes objets Personne et Adresse.

Ensuite, ton controleur appelle tes classes Services ou DAO pour enregistrer les données dans la base (tu envois plusieurs requêtes sur la table Adresse et une requête sur la table personne)

Et la méthode qui te permet d'appeler le managedBean renvoi la chaine de caractère qui te permet d'effectuer la redirection.

Tu comprend le mécanisme ?

Par contre, n'utilises jamais deux contrôleurs pour un même écran sauf si tu as vraiment une bonne raison de le faire. C'est comme l'héritage sur les managedBean, c'est possible mais ca fout la merde un peu partout.
Commenter la réponse de cs_Julien39
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
merci pour vous,
comment je peut appeller les 2 managedBean en même temps.
moi j'utilise:

public personneCtrl(){
Context ctx;
try{
ctx =new InitialContext();
personneDaoLocal=(ContactDaoLocal) ctx.lookup("personneDao/local");
}
catch (NamingException e){e.printStackTrace();}
}

comment je doit faire pour appeller les deux classe personne et adresse en même temps??????
Commenter la réponse de kerfahi
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
dsl mais comment je peux faire "c'est le controleur qui récupère toutes les informations du managedBean pour créer tes objets Personne et Adresse."
Commenter la réponse de kerfahi
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
Bonjour,

Il ne faut pas utiliser deux managedBean, un écran = un managedBean
Commenter la réponse de cs_Julien39
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
dsl mais j'ai pas compris.est ce que je doit faire un contrôleur pour chaque écran????
Commenter la réponse de kerfahi
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
Pour chaque écran html : un managedBean qui contient toutes les données de ton écran associé à un controleur qui contient autant de méthodes que de fonctions dans ton ihm.

Je parle de contrôleur au sens MVC et pas au sens Controle-Validation en jsf, on est d'accord ?
Commenter la réponse de cs_Julien39
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
moi je parle du controleur en jsf qui permet la navigation entre les pages.et qui permet l'appel des dao pour effectuer les opperations necessaire.est ceque je doit faire "personneCtrol" "et adresseControl" ????
j'ai besoin d'enregistrer psersonne et adresse dans la base sachant qu'il sont deux tableau different????
Commenter la réponse de kerfahi
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
Alors, tu emplois controleur à mauvais escient...

Mais la réponse est un peu la même : tu n'as qu'un seul managedbean par écran et sur ce managed bean, tu peux avoir plusieurs méthodes qui te permettent d'enregistrer toutes les données et de rediriger ton utilisateur vers un autre écran gràce à l'édition du faces-config.
Commenter la réponse de cs_Julien39
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
voici mon contactCtrl.java:

public class ContactCtrl {

public List<Contact> listContacts;
public ContactCtrl() {
Context ctx;
try {
ctx = new InitialContext();
contactDaoLocal=(ContactDaoLocal) ctx.lookup("ContactDao/local");
} catch (NamingException e) {

e.printStackTrace();
}

}

ContactDaoLocal contactDaoLocal;

public Contact contact=new Contact();

public String ajoutContactPage(){
return "ajout-contact";
}
public String supprimerContactPage(){
return "supprimer-contact";
}
public String confirmContactPage(){
return "register";
}
public String reviseContactPage(){
return "revise";
}

public String ajoutContactAction(){

try{

contactDaoLocal.add(contact);

return "ajout-success";
}
catch (Exception e) {
return "failed";
}

}


public String supprimerContactAction(){
try{
contactDaoLocal.delete(contact.getPasseportNumber());
return "supprimer-success";
}
catch (Exception e) {
return "faled";
}

}
public String retourMenu(){
return "menu";
}

public void setContact(Contact contact) {
this.contact = contact;
}

public Contact getContact() {
return contact;
}

public String list(){

List<Contact> contacts=contactDaoLocal.gettAll();

for(Contact c:contacts){
System.out.println(c.getFirstName());

}
return "liste";
}

public List<Contact> list1(){
List<Contact> contacts=contactDaoLocal.gettAll();

return contacts;

}

public void validateEmail(FacesContext context, UIComponent toValidate,
Object value) throws ValidatorException {
String eMail = (String) value;
if (eMail.indexOf("@") < 0) {
FacesMessage message = new FacesMessage("Adresse Email invalide !");
throw new ValidatorException(message);
}
}

public List<Contact> getListContacts() {
return contactDaoLocal.gettAll();
}
public void setListContacts(List<Contact> listContacts) {
this.listContacts = listContacts;
}


}[b]
dand mon ejb j'ai les entite contact et adresse/b
ma question est est ceque je doit avoir 2 controlleurs contactCtrl et adresse Ctrl???
si oui comment je doit faire pour ajouter en maime temps les attribues du contact et adresse???
par exemple:

dans une jage jsp

...
<h:input value="#{contactCtrl.contact.nom}" >
...
le problem comment faire pour adresse:
...
<h:input value ="#{adresseCtrl.adress.country}" >
...
comment je doit faire l'action ajout a la fin du formulaire?????
Commenter la réponse de kerfahi
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
0
Merci
Beurk, ce n'est pas comme ca qu'on utilise les bean normalement :(

Mais admettons, je ne vois pas ce qui te pose problème en fait. Il te suffit de tout placer dans un <h:form> et là, tu peux soit ajouter un commandLink soit un button, ... sur lequel tu places action=#{managedBean.methode}

Et lors du click, c'est cette méthode qui sera appelée. Elle doit retourner une chaine de caractère qui te servira à faire des redirections.
Commenter la réponse de cs_Julien39
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
oui je sais ca .mais j'ai 2 managedBean
ou je doit placer la methode dans contactCtrl ou adressCtrl???
et comment je peut metre l'instance de l'adesse si j'ai choisie de metre la methode dans contactCtrl???
merci
Commenter la réponse de kerfahi
Messages postés
96
Date d'inscription
lundi 24 novembre 2008
Dernière intervention
5 mai 2013
0
Merci
merci pour votre aide
Commenter la réponse de kerfahi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.