# Portlet to portlet linking



## JayJay (16. Jan 2008)

Also, ich habe ein projekt in dem ich daten von einem *portlet * zum anderen schicken muss in diese dann verarbeiten. 
Das problem ist, dass diese beiden portlets nicht im selben projekt liegen, sondern eigenständige portlets sinds.

Ich weiss nicht ganz wie ich die sache angehen soll, da ich auch im web nichts besonderes darüber finden kann. 
Ich arbeite mit eclipse und dem *IBM WebSphere Portal 6 + SOA\wsdl*. Zwei lösungen wären "*portlet wiring" und "url mapping".* 
So viel ich weiss müssen bei "portlet wiring" die portlets im gleichen projekt angelegt sein, um daten übermitteln zu können. 
Also sollte das nicht fuktionieren. Bei "url mapping" bin ich mir nicht sicher ob es funktioniert. 

Ich habe links in einem portlet, wenn eines dieser geclicked wurde, soll das portlet auf ein anderes portlet wechseln und bestimmte daten aus dem ersten portlet mitnehmen.

Ich wollte mal nachfragen ob jemand mal was ähnliches gemacht hat und mich auf die richtige spur bringen könnte anhand einer idee oder einigen resources\tutorials.


----------



## JayJay (18. Jan 2008)

Also nach langem ausprobieren habe ich zwei lösungen finden können. Für alle die interesse habe:

1)IBM & JSR 168 Portlets: 
http://www-128.ibm.com/developerworks/websphere/library/techarticles/0508_scott/0508_scott.html

Dies ist die vorgegebene lösung von IBM, die einigen extra aufwand beinhaltet. 

2)Meine lösung - viel einfacher!

In der source JSP:
Als erstes einen URLMapping namen dem target portlet im portal zuweisen.

```
String connectionToRetailPortlet = "/wps/myportal/menuorderRetail?";
```
 menuorderRetail ist hier der URLMapping name bei mir. Das "?" sagt der URL das nach der adresse ein query string angehängt wird. Was der parameter ist den wir dem target portlet zukommen lassen wollen. 


```
<TD valign="top" align="center">[url="<%=connectionToRetailPortlet + overView.getCustomerOrderKey().getOrderId() %>"]<%=overView.getCustomerOrderKey().getOrderId() %>[/url] </TD>
```
 - hier der link + "?" + parameter.

Dann im target portlet:
Um den parameter zu empfangen braucht man diesen javascript, AM ENDE der FORM auf der start seite des target portlets:

```
<script type="text/javascript">
var orderId = self.location.search;
if(orderId && orderId.indexOf("?") != -1){
	document.form3.<%=Menuorder3RetailPortlet.FIELD_WIRED_ORDERID %>.value=orderId.substring(1);
	document.form3.action="<portlet:actionURL><portlet:param name="<%= Menuorder3RetailPortlet.ACTION  %>" value="<%= Menuorder3RetailPortlet.ACTION_WIRED_ORDERID %>"/></portlet:actionURL>";
	document.form3.submit();
}
</script>
```

Der ausschlag gebende code hier ist :
	
	
	
	





```
var orderId = self.location.search;
```
Diesen dann in ein "hidden" field schreiben und siehe da, per request.Parameter kann man dan im Portlet diesen parameter verwenden.

Hier das hidden Feld.


```
<INPUT type="hidden" name="<%=Menuorder3RetailPortlet.FIELD_WIRED_ORDERID %>" >
```


----------



## Ralf Ueberfuhr (20. Jan 2008)

Also wenn du eh den WPS 6 nimmst, dann sind Cooperative Portlets genau das richtige für dich. Es handelt sich dabei um einen Portlet Service, einen Websphere-spezifischen Dienst außerhalb des JSR-168-Standards.


----------



## Ralf Ueberfuhr (20. Jan 2008)

Interessant für die Zukunft könnte auch die Portlet-2.0-Spezifikation sein.
 - Events: Portlets können Events senden und empfangen
 - Gemeinsame Renderparameter für alle Portlets


----------



## JayJay (25. Jan 2008)

"Der Begriff Kooperative Portlets bezieht sich auf die Fähigkeit von Portlets auf einer Seite zur Interaktion und zum Informationsaustausch. "

http://publib.boulder.ibm.com/infoc...pic=/com.ibm.wp.ent.doc/wps/wpsc2aconfig.html

Genau da lag ja das problem. Cooperative Portlets funktionieren nur wenn die portlets auf der gleichen Seite liegen, also die gleiche .war file. Bei mir war der fall das beide portlets von einander unabhängig sind. Also nichts miteinander zu tun haben ausser das sie im gleichen portal liegen.

Der code oben löst dieses problem. Und du hast recht, genau diesen punkt will die JSR 286(Portlet-2.0-Spezifikation ) in der zukunft lösen. Aber bis das mal rauskommt kann man eine der 2 lösungen oben benutzen.


----------



## Ralf Ueberfuhr (25. Jan 2008)

> Cooperative Portlets funktionieren nur wenn die portlets auf der gleichen Seite liegen, also die gleiche .war file.

Nein. Portlets verschiedener WARs und EARs können auf einer Seite platziert werden und somit miteinander kooperieren.


----------



## JayJay (29. Jan 2008)

Ja hast natürlich recht. Trotzdem funktionieren sie nicht wenn sie NICHT auf der gleichen seite sind was bei mir der fall war.


----------



## JayJay (29. Jan 2008)

Bei uns hat jedes portlet seine eigene seite.


----------



## Ralf Ueberfuhr (29. Jan 2008)

Ach so, auf unterschiedlichen Seiten - das ist schon was Anderes. Wenngleich sich mir dann der Sinn der Kooperation nicht erschließt. Aber da wirst du Gründe haben.


----------

