Le service d'url permet d'interagir avec le socle portail en générant des urls conformes aux fonctionnalités du portail :

  • portlets dynamiques : lancement d'un portlet dans la page courante
  • pages dynamiques : lancement d'une nouvelle page à partir d'un template
  • navigation : intégration avec le mécanisme de conversation
  • popup : lancement d'un portlet en mode popup

Accès au service d'urls

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;
}

Portlets dynamiques

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);

Pages dynamiques

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);

Ouverture de fancybox

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);

Intégration à la conversation

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.

Rafraîchissement de la page

La méthode getRefreshPageUrl() permet de rafraichir entièrement la page (portlet et contenus).