Utiliser une methode d'un controller

Heriandrisoa - Modifié le 14 juin 2018 à 08:47
Twinuts
Messages postés
5372
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
- 3 août 2018 à 11:10
Bonjour,
J'ai un controller avec une methode. Je veux appeler cette methode dans un autre controller. Exemple :
@Named("documentsController")
@SessionScoped
public class DocumentsController implements Serializable {

    @EJB
    private DocumentsFacade ejbFacade;

public void List<Documents> list()    
List<Documents>  list_doc = ejbFacade.findAll();
return list_doc;
}

et je veux appeler la methode list() dans un autre controller :

@Named("classeurController")
@SessionScoped
public class ClasseurController implements Serializable {

    @EJB
    private ClasseurFacade ejbFacade;

public void  contenuClasseur()    
DocumentsController doc = new DocumentsController();
ListwDocuments> list = doc.list();
......

}

EDIT : Ajout des balises de code

j'ai besoin d'aide. Merci

2 réponses

H_Le_Grand
Messages postés
8
Date d'inscription
jeudi 2 août 2018
Statut
Membre
Dernière intervention
2 septembre 2020

3 août 2018 à 10:27
Essai de rendre plus propre ton code.
0
Twinuts
Messages postés
5372
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
111
3 août 2018 à 11:10
Salut,

Si je reprends ce que tu as fait:
@Named("documentsController")
@SessionScoped
public class DocumentsController implements Serializable {

    @EJB
    private DocumentsFacade ejbFacade;

  public void List<Documents> list()    
    /* Inutile tu peux retourner directement le résultat de findAll sans passer par une variable temporaire qui n'a pas d'utilité. */
    /*List<Documents>  list_doc = ejbFacade.findAll();
    return list_doc;*/
    return ejbFacade.findAll();
  }
}


Tu n'utilises pas déjà la méthode list() dans la méthode contenuClasseur() ?
Si, tu veux utiliser la même instance de DocumentsController pour tous les ClasseurController, il suffit de passer directement la référence de DocumentsController à la méthode contenuClasseur ou de passer par une variable de classe.

Ex1:
@Named("classeurController")
@SessionScoped
public class ClasseurController implements Serializable {

    @EJB
    private ClasseurFacade ejbFacade;

  public void  contenuClasseur(DocumentsController doc)  {
    List<Documents> list = doc.list();
    ......
  }
 /*
  ou alors, si tu n'utilises que la méthode list, tu peux simplement faire:
  public void  contenuClasseur(List<Documents> list)  {
    ......
  }
*/
}


Ex2:
@Named("classeurController")
@SessionScoped
public class ClasseurController implements Serializable {
    @EJB
    private ClasseurFacade ejbFacade;
    private DocumentsController mDocumentsController;
    /*
    ou alors, si tu n'utilises que la méthode list, tu peux simplement faire:
    private List<Documents> mDocuments;
   */

  public(ou protected) void setDocumentsController(DocumentsController documentsController) {
    mDocumentsController  = documentsController;
  }
  /*
  ou, en fonction du cas d'utilisation
  public(ou protected) void setDocuments(List<Documents> documents) {
    mDocuments  = documents;
  }
  */
  public void  contenuClasseur()  {
    List<Documents> list = mDocumentsController.list();
    /* ou mDocuments en fonction du cas d'utilisation */
    ......
  }
}

Après, comme je ne suis pas trop aux faits des EJB, je ne sais pas trop si ce que j'ai proposé est applicable, mais dans tous les je pense que ce site ICI pourrait te donner des pistes.


0