Le service d'url permet d'interagir avec le socle portail en générant des urls conformes aux fonctionnalités du portail :
Le service d'url est automatiquement injecté dans les contextes de portlets.
Pour le récupérer, il suffit de procéder comme suit :
public IPortalUrlFactory getPortalUrlFactory() {
if (this.urlFactory == null) {
this.urlFactory = (IPortalUrlFactory) this.portletCtx.getAttribute("UrlService");
}
return this.urlFactory;
}
La méthode getStartPortletUrl() permet de lancer dynamiquement une window associée à une instance de portlet. Les paramètres properties et parameters permettent d'initialiser les propriétes de la window et les render parameters du portlet. Le portlet peut être ouvert dans la page courante ou dans une popup.
Map<String, String> properties = new HashMap<String, String>(1);
properties.put("osivia.browser.path", pubInfos.getDocumentPath());
Map<String, String> parameters = new HashMap<String, String>(0);
String browserUrl = this.getPortalUrlFactory().getStartPortletUrl(portalCtx, "osivia-portal-browser-portlet-instance", properties, parameters, true);
Il est possible de créer dynamiquement une page dans la session de l'utilisateur grâce à la méthode getStartPageUrl(). La page sera instanciée sur la base du template passé en paramètre. Il sera possible de lui des paramètres publics (au sens de la JSR286) ainsi que des propriétés (au sens JBoss Portal).
Map<String, String> dynaProps = new HashMap<String, String>();
Map<String, String> dynaParams = new HashMap<String, String>();
String dynamicUrl = this.getPortalUrlFactory().getStartPageUrl(this.getPortalControllerContext(), portalName, pageName, templatePath, dynaProps, dynaParams);
Les fancybox constituent une façon ergonomique d'intégrer des fonctions avancées à un portlet. Les portlets peuvent être instanciés en mode fancybox, auquel cas ils sont affichés dans un template minimaliste.
La méthode adaptPortalUrlToPopup() permet de préciser au portail que l'url doit être ouverte en mode fancybox.
Exemple d'ouverture d'une vue du portlet courant dans une fancybox:
PortletURL editPortletUrl = response.createRenderURL();
editPortletUrl.setParameter(WikiConstants.MODE_PARAMETER_NAME, String.valueOf(true));
String editUrl = this.portalUrlFactory.adaptPortalUrlToPopup(portalContext, editPortletUrl.toString(),
IPortalUrlFactory.POPUP_URL_ADAPTER_OPEN);
Chaque page du portail a un état qui correspond aux paramètres des portlets, aux paramètres publics des pages, à la liste des portlets et des pages dynamiques. Cet état est décrit dans le pagemarker présent dans l'url.
Afin de respecter l'inscription dans la navigation du portail (gestion du back, multi-tabulations), les urls doivent intégrer ce pagemarker. La méthode adaptPortalUrlToNavigation() adapte une url non conversationnelle.
La méthode getRefreshPageUrl() permet de rafraichir entièrement la page (portlet et contenus).