Question

Je suis en train d'écrire un JSR-168 portlet qui peut être ajouté à un conteneur à plusieurs reprises. Chaque conteneur (Liferay, JBoss, etc.) a sa propre façon interne de différencier entre plusieurs instanciations du même portlet.

Cependant, je voudrais identifier de manière unique mon exemple portlet dans la méthode de doView() lui-même.

Y at-il standard, mécanisme JSR-168 pour récupérer une partie identifiant unique qui est différent pour chaque instance de mon portlet? Je l'ai vu différentes solutions où les gens au hasard

Était-ce utile?

La solution

1,0 portlet (168) fournit le renderResponse. getNamespace () procédé, qui doit être unique par exemple de portlet.

De spec: PLT.12.3.4 encodage Namespace :

  

La méthode getNamespace doit fournir   le portlet avec un mécanisme qui   assure l'unicité du retour   chaîne dans toute la page du portail. Pour   par exemple, la méthode getNamespace serait   retourner une chaîne unique qui pourrait être   préfixé à un nom de variable JavaScript   dans le contenu généré par le   portlet, assurant son unicité 5 dans   la page. le getNamespace   méthode doit retourner la même valeur si   invoqué plusieurs fois dans un rendu   demande.

Si vous voulez y accéder dans processAction , vous aurez probablement envie de le stocker dans la session ou comme actionURL paramètre .

Si la mise à niveau est une option, Portlet 2.0 (286) change sous-jacent PortletResponse l'interface pour fournir les getNamespace () méthode et ajoute également une PortletRequest.getWindowID () méthode qui pourrait être utile pour vous.

Autres conseils

Non, il n'y a pas ID commun pour l'instance. Je l'ai mis en place un conteneur de portlet moi-même, il n'y a pas par exemple id dans le api public - le récipient a un, de la cause. La session de portlet (de javax.portlet.PortletRequest#getPortletSession()) est unique pour un portlet (définition par tag dans portlet.xml) et un utilisateur (javax.servlet.http.HttpSession), cela ne suffit pas pour vous.

IMHO un identifiant généré (peut aussi être un compteur simple (synchronisation) dans la classe portletl) et stockées dans la session de portlet est la seule façon portable. La classe de portlet lui-même est généralement partagée beween cas, de sorte que le java.lang.System#identityHashCode(Object x) est également inutile.

Pourquoi avez-vous besoin?

Je suis surpris de constater que cet identifiant unique ne semble pas exister comme par Amé. L'ID de l'instance peut être utilisé pour stocker toutes les préférences de portlet dans notre propre base de données plutôt que le récipient fourni un. L'une des raisons pour lesquelles nous avons besoin de stocker cela sur notre propre est les préférences fournies par conteneur ne prend pas en charge les préférences spécifiques locale.

i.e. une instance de portlet peut avoir des préférences différentes par lieu.

Nous essayons d'utiliser Liferay pour nos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top