Obtenir l'ID objet pour une page ou un portlet
Il existe plusieurs cas où un portlet doit obtenir l'ID objet utilisé pour identifier de façon unique un portlet ou une page. Par exemple, l'ID objet d'une définition de page est nécessaire pour qu'un portlet démarre une instance dynamique de cette page.
Vous pouvez utiliser la méthode lookup() de la classe de contexte JNDI afin d'obtenir l'ID objet pour un portlet ou une page, en transmettant le nom unique de la page ou du portlet. Comme alternative pour les portlets, vous pouvez obtenir l'ID objet en utilisant la méthode lookup() JNDI et en transmettant une combinaison de l'ID d'application de portlets et du nom du portlet.
- Pour les portlets standard, l'ID d'application de portlets est la valeur de l'attribut ID de l'élément <portlet-app/> dans le fichier portlet.xml. Toutefois, cet attribut n'est pas requis par la spécification Java Portlet Specification. Si l'attribut ID n'est pas défini, le nom de fichier WAR du portlet est utilisé comme ID d'application de portlet.
- Pour les portlets HCL, l'ID d'application de portlets est l'attribut UID de l'élément <portlet-app/>. Cet attribut est obligatoire.
L'exemple suivant présente les deux façons de rechercher un ID objet.
// initialization
Context ctx = new InitialContext();
// portal:uniquename prefix is required for unique name lookup
Name uniqueName = new CompositeName("portal:uniquename");
// portal:config/ prefix required for portlet definition lookup
Name portletName = new CompositeName("portal:config/portletdefinition");
// the unique name assigned to the page is example.org.page
uniqueName.add(org.example.page);
ObjectID oidForName = (ObjectID) ctx.lookup(uniqueName);
// appID and portletName have already been set programmatically
portletName.add(appID);
portletName.add(portletName);
ObjectID portletDefOID = (ObjectID) ctx.lookup(portletName);
L'élément Name utilisé avec la méthode lookup() est créé à partir d'un élément CompositeName, qui est prérempli avec les préfixes du portail requis placés entre guillemets. Cette technique est utilisée pour ne pas avoir à ignorer les caractères spéciaux dans le préfixe.
Dans cet exemple, les modules suivants sont requis au moins pour les instructions d'importation :
javax.naming.CompositeNamejavax.naming.Contextjavax.naming.Namecom.ibm.portal.ObjectID