Jsf ejb dao

Résolu
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 - 28 févr. 2012 à 10:49
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre 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

13 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
28 févr. 2012 à 15:33
Il ne faut pas avoir deux managedBean, sinon, tu as ce genre de problème. et il n'y a pas de solution...
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
28 févr. 2012 à 11:23
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.
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 12:25
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??????
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 12:28
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."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
28 févr. 2012 à 12:54
Bonjour,

Il ne faut pas utiliser deux managedBean, un écran = un managedBean
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 13:39
dsl mais j'ai pas compris.est ce que je doit faire un contrôleur pour chaque écran????
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
28 févr. 2012 à 13:57
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 ?
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 14:16
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????
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
28 févr. 2012 à 14:22
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.
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 14:48
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?????
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 366
28 févr. 2012 à 14:57
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.
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 15:08
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
0
kerfahi Messages postés 96 Date d'inscription lundi 24 novembre 2008 Statut Membre Dernière intervention 5 mai 2013 2
28 févr. 2012 à 16:27
merci pour votre aide
0