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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
<?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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.