+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2007
    Messages : 82
    Points : 20
    Points
    20

    Par défaut Inter Portlet Communication

    Bonjour à toutes et à tous.

    Voilà je suis débutant sur le développement de portlet.

    Je doit mettre en place un système d'IPC pour un projet d'apprentissage.

    Après avoir passé plusieurs jours à naviguer sur le net, à lire beaucoup de documentation et de tuto, je ne parviens pas à faire fonctionner mon IPC.

    Je souhaite avoir une chose toute bête, comme par exemple une portlet qui contient un bouton et lorsque l'on clic dessus, un message s'affiche dans une autre portlet.

    Je précise que les portlets sont dans des WAR différent mais qu'elles seront sur la même page.

    Pour l'instant j'ai fait la chose suivante :

    création d'une portlet émettrice.

    J'ai ajouté dans sont portlet.xml :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <portlet>
            <supported-publishing-event>
    	        <qname xmlns:x="localhost:8080/events">x:EventClic</qname>
            </supported-publishing-event>
    </portlet>
    <event-definition>
    	<qname xmlns:x='localhost:8080/events'>x:EventClic</qname>
    	<value-type>java.lang.String</value-type>
    </event-definition>
    Pour cette même portlet, j'ai créé une class SendEvent.java :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class SendEvent extends GenericPortlet{
     
    	@ProcessAction(name = "truc")
    	public void truc(ActionRequest request, ActionResponse response)
    	{
    		QName qName = new QName("localhost:8080/events", "EventClic");
    		response.setEvent(qName, "on est le 1er Juin");
    	}
    }
    Et enfin un fichier xhtml Sender.xhtml :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?xml version="1.0"?>
     
    <f:view
     	xmlns:f="http://java.sun.com/jsf/core"
     	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:ice="http://www.icesoft.com/icefaces/component"
    	xmlns:icecore="http://www.icefaces.org/icefaces/core"
    	xmlns:liferay-ui="http://portletfaces.org/liferayfaces/liferay-ui"
    	xmlns:liferay-util="http://portletfaces.org/liferayfaces/liferay-util"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    >
    	<h:head />
    	<h:body>
    		<a href="<portlet:actionURL name='truc'></portlet:actionURL>">c'est parti</a>
    	</h:body>
    </f:view>


    Maintenant j'ai créé une portlet réceptrice

    portlet.xml:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <portlet>
            <supported-processing-event>
    	        <qname xmlns:x="localhost:8080/events">x:EventClic</qname>
            </supported-processing-event>
    </portlet>
    <event-definition>
    	<qname xmlns:x='localhost:8080/events'>x:EventClic</qname>
    	<value-type>java.lang.String</value-type>
    </event-definition>
    Pour la class RecieveEvent.java :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public class RecieveEvent {
     
    	@ProcessEvent (name = "chose")
        public void chose(EventRequest request, EventResponse response)
        {
        	Event event = request.getEvent();
            if (event.getName().equals("EventClic"))
            {
            	String value = (String) event.getValue();
                //process payload here
                System.out.println("------------------------------------------------------");
                System.out.println(" received an event: " + value);
                System.out.println("------------------------------------------------------");
                response.setRenderParameter("EventClic", value);
            }
        }
    }
    Donc voilà. Ceci ne fonctionne pas. J'ai l'exception suivante qui est levé :
    Code :
    1
    2
     
    javax.faces.view.facelets.FaceletException: Error Parsing /xhtml/Sender.xhtml: Error Traced[line: 14] The value of attribute "href" associated with an element type "null" must not contain the '<' character.
    De plus je ne comprend pas à quoi correspond le QName. Est-ce l'adresse ou sera placé la portlet qu'il faut mettre ?

    Si quelqu'un peut m'aider ou me fournir un exmple tout simple se serait super sympa. Parce que les exemples que j'ai trouvé sur internet ne sont pas simple et je me mélange les pinceaux.

    Dernière précision, apparemment le mieux est d'utiliser JSR 286 qui est de rigueur maintenant.

    Si vous avez besoin de plus d'information ou une question ou autre faite le moi savoir, je suis à votre écoute.

    Amicalement Boobs60.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2007
    Messages : 82
    Points : 20
    Points
    20

    Par défaut

    J'ai partiellement résolu mon problème.

    En faite la technique que j'utilisais n'était pas la bonne puisqu'elle est destiné pour des JSF hors je travail en JSF.

    J'ai donc rectifié le tir. Maintenant j'arrive bien à faire passer un String entre mes portlets. Une chose me gène c'est qu'avec ma méthode (et je ne sais pas si il y en a d'autre. Je n'ai rien trouvé sur internet) c'est que la page entière se refresh. Ce n'est pas dramatique en soit mais ça me gène un peut puisque l'utilisateur va être amené à cliquer pas mal de fois .

    Mais ceci est secondaire. La je sais que je récupère bien mes évènements via des :

    Code :
    1
    2
     
    System.out.println(myEvent);
    Ce que j'aimerais c'est pouvoir afficher la valeur de mes évènements dans ma portlet mais je n'y arrive pas. Je ne sais pas ce qu'il faut que je mette dans mon fichier xhtml pour pouvoir appeler la valeur de mon évènement.

    Si quelqu'un passe par la et pense pouvoir m'aider je suis preneur.

    Amicalement Boobs60.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    décembre 2009
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 79
    Points : 31
    Points
    31

    Par défaut

    Bonjour boobs60,
    Essaye les demos de liferay concernant l'inter-Portlet Communication (IPC) :
    il y a 4 exemple :
    - JSF2 IPC (Events) - Customers
    - JSF2 IPC (Events) - Bookings
    - JSF2 IPC Public Render Parameters Portlet
    - ICEfaces3 IPC Ajax Push Portlet

    http://www.liferay.com/community/lif...ay-faces/demos

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •