IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Portails Java Discussion :

Communication entre portlets


Sujet :

Portails Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Par défaut Communication entre portlets
    Bonjour,

    Je suis débutante dans le developpement de portlets sous LifeRay 4.3.2 et j'aimerais parvenir à faire communiquer 2 portlets entre elles.
    J'aimerais par exemple que le texte saisi dans un champ texte de la 1ère portlet s'affiche dans la seconde.
    Après de nombreuses recherche, j'ai constaté qu'il était sans doute possible d'utiliser les tags renderURL et actionURL. Cela dit, je ne trouve pas de toturial et je ne parviens pas à mettre en place cette communication.

    Quelqu'un pourrait-il m'aider ?
    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut Communication inter-portlets
    Bonjour,

    Je ne connais pas liferay mais je sais qu'un portail respectant la norme
    JSR286 permet de faire ce genre de communications via des évènements.
    Reste à savoir si liferay implémente ce genre de mécanisme au sein de son
    portlet container. Si tel est le cas, la méthode décrite ci-dessous devrait fonctionner, peut être avec une légère adaptation des tags du fichier
    portlet.xml.
    La méthode décrite ci-dessous peut paraître lourde mais elle permet de passer
    des objets java d'une portlet à une autre.

    Le principe est le suivant pour communiquer de la portlet A vers la portlet B:
    1) Définir une classe permettant de transporter l'information:
    C'est un exemple on peut mettre ici ce que l'on veut.

    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
    18
    19
    20
    21
    import java.lang.String;
    import java.io.Serializable;
    import java.util.*;
     
    public class MyEvent implements Serializable {
     
      private ArrayList<String> addresses = new ArrayList<String>();
     
     
      public void addAddr(String addr) {
    	  if (addresses == null)
    	  {
    		  	addresses = new ArrayList<String>();
    	  }
    	  addresses.add(addr);
      }
      public String getAddr(int i) {
        if (i >= addresses.size()) return null;
        else return addresses.get(i);
      }
      static final long serialVersionUID = 1;

    2) Dans le processAction() de la portlet A, on génère l'évènement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        	MyEvent addr = new MyEvent();
        	addr.addAddr("voila mon texte");
    3) Définir comme variable membre de la classe B:
    4) Gérer la réception de l'évènement dans la portlet B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public void processEvent(EventRequest req, EventResponse resp)
    			throws PortletException, IOException {
    		System.out.println("Evenement reçu !!!!!!!!!!!!!");
    		_event = (MyEvent) req.getEvent().getValue();
    	}
    Ce qui est caché ici, c'est le rôle du PortletContainer: c'est lui qui sait quelle portlet peut recevoir un type d'évènement donné (ici B peut recevoir MyEvent), et c'est lui qui redirige l'évènement de la portlet A vers la portlet B.

    Pour cela il faut l'aider à en savoir plus:

    5) Dans le fichier de config portlet.xml, ajouter les blocs suivants:

    a) Juste avant le tag </portlet-app>:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       <event-definition>
        <name>MyEvent</name>
        <value-type>chezmoi.MyEvent</value-type>
      </event-definition>

    b) Sur la portlet A:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <supported-processing-event>MyEvent</supported-processing-event>

    c) Sur la portlet B:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <supported-processing-event>MyEvent</supported-processing-event>

    Ca marche je l'ai testé avec exoPortletContainer et exoWebOS.
    Attention les licences ne sont pas les mêmes entre liferay et exo...

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Par défaut
    Bonjour,
    j'essaye de suivre votre méthode, je voudrais savoir qu'est ce qu'il faut mettre ensuite dans les pages jsp?
    Merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut Remplissage des pages JSP
    Bonjour,
    Dans les pages JSP on met la partie IHM de la portlet.
    Ce peut donc être un mix de plusieurs technos: JSP, HTML, JAVASCRIPT, ...
    le tout agrémenté par les taglibs.
    L'idée est de générer une IHM qui contient suffisamment d'informations (eventuellement cachées) pour recontacter le serveur, de préférence de manière asynchrone: via de l'AJAX.
    ServeResource permet de demander une ressource et pas la page HTML complète au serveur.
    Exemple: http://www.liferay.com/web/guest/com...message/937530
    Et google: liferay serveresource AJAX inurl:pdf
    le premier lien est un document PDF qui évangelise liferay mais néanmoins fournit certaines informations intéressantes.

Discussions similaires

  1. [Liferay] Communication entre portlet
    Par lachik dans le forum Portails
    Réponses: 4
    Dernier message: 21/10/2015, 16h06
  2. Réponses: 8
    Dernier message: 14/09/2010, 19h46
  3. [eXo Portal] Communications entre portlet
    Par sairius dans le forum Portails
    Réponses: 0
    Dernier message: 11/05/2009, 14h02
  4. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo