Précédent   Forum du club des développeurs et IT Pro > Java > Développement Web en Java > Portails
Portails Forum d'entraide sur les Portlets (JSR 168 / JSR 286) et les solutions Java de type portail (GateIn, Liferay, JBoss Portal, eXo Platform, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/06/2012, 17h21   #1
boobs60
Membre à l'essai
 
Homme benoit
Développeur Web
Inscription : mai 2007
Messages : 81
Détails du profil
Informations personnelles :
Nom : Homme benoit
Localisation : France

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

Informations forums :
Inscription : mai 2007
Messages : 81
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.
boobs60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2012, 14h25   #2
boobs60
Membre à l'essai
 
Homme benoit
Développeur Web
Inscription : mai 2007
Messages : 81
Détails du profil
Informations personnelles :
Nom : Homme benoit
Localisation : France

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

Informations forums :
Inscription : mai 2007
Messages : 81
Points : 20
Points : 20
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.
boobs60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2012, 10h35   #3
othman3535
Nouveau Membre du Club
 
Othman
Inscription : décembre 2009
Messages : 72
Détails du profil
Informations personnelles :
Nom : Othman

Informations forums :
Inscription : décembre 2009
Messages : 72
Points : 29
Points : 29
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
othman3535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h34.


 
 
 
 
Partenaires

Hébergement Web