I am writing my first portlet based application (for liferay, but the solution should be container agnostic) and I am wondering how people solve to provide links to the user that "lead" to different portlets (maybe on different "pages" in the portal).
While you can easily have different view modes inside your portlet, how can you link to another portlet and (maybe) also pass parameters along?
I am not talking about plain communication between portlets, it's the real pageflow that interests me.
Example: You have page A with a portlet that displays a list of news items. Then you have page B that is in the way configured I'd like a single the news item to be shown (for example different portlets around it)
Is there a generic solution to link to page B and say to the news-Detail-Portlet that it should show item XYZ?
The quick and dirty solution would be to configure the target link via edit mode of the news-list-portlet. But this has several disadvantages: - complex portlets may have several target URLs which leads to massive configuration efforts for the portal admin - the urls may not follow a scheme that allows simple parameter injection
I have a solution in mind, but this would require massive efforts and maybe changes in the targeted portlets, which is not always possible if you use 3rd party portlets.
My solution would look like this: (draft!)
Portlets register at a central service with their portlet IDs and when a portlet wants to link to a portlet it can do a lookup based on a symbolic name. This would ease the pain for the admin, because it is possible to "auto discover" portlets. The service may also provide a UI to wire portlets based on source and target portlet.
The URL generation for portlets that can be changes may be solved via service call to the portlet that generates the URL as a whole with injected parameters and returns it. For portlets that you can't change you have to append the parameters and hope that it works. :-/
Any suggestions? Are there simpler solutions? existing solutions?
Thanks!
Patrick