2012-06-22 58 views
8

Tengo un requisito para obtener permiso de recursos usando el nombre del portlet.¿Cómo obtener Portlet Id usando el nombre del portlet en Liferay?

Tendré el nombre del portlet, no el Id.

Nombre de permiso de recurso para un portlet es Id de ese portlet. Comprobé la tabla de Portlet, solo tiene Id y otra información. ¿Dónde se guardarán los otros atributos del portlet?

¿Hay alguna manera de obtener el Id del portlet utilizando el nombre del portlet? Tengo un workaroud para obtener todos los portlets y comparar, pero si puedo obtener directamente el ID del portlet usando el nombre del portlet, será útil.

Es urgente, si alguien sabe por favor responder de nuevo, será de gran ayuda.

Gracias de antemano

Respuesta

11

Si se mira de cerca en cuanto a cómo se genera la identificación de portlets basa en el nombre de portlets, se llega a la respuesta.

Es un patrón constante que se sigue, por lo que puede construir el Portlet Id como lo hace liferay si tiene el nombre. Liferay también construye la ID con la ayuda del nombre del portlet.

patrón de portlet-id: <portletname in xml>_WAR_<servlet context name i.e. the war file without any special characters such as the hyphen>

Por ejemplo: Si su nombre de portlet se MyWork define en portlet.xml y el archivo generado en la carpeta webapps (si está utilizando Tomcat) es MyWork-portlet entonces el Id resultante ser MyWork_WAR_MyWorkportlet.

Ahora, si tiene el código fuente liferay, puede mirar el método PortletLocalServiceImplprivate _readPortletXML.

Editar:
Si usted quiere encontrar los portlets de una página en particular (dado el friendly-url de la página), puede que encuentre este answer útil.

+0

Gracias Prakash. Pero, ¿cómo sabré el nombre de contexto de servlet que es el nombre de archivo war si tengo varias guerras desplegadas? Sabía cómo se construye la identificación del portlet. Tendré muchos portlets como parte de diferentes contextos de servlets. – Vijayalakshmi

+0

Guerras múltiples del mismo portlet en la misma instancia? o ¿Una guerra con muchos portlets empaquetados? Si puede explicar el entorno, sería útil –

+0

Una guerra con múltiples portlets empaquetados que son instancibles. También he observado que la identificación del portlet tendrá información de instancia adjunta. cómo manejar en ese caso. Si lo despliego en diferentes servidores, el ID de instancia será diferente. – Vijayalakshmi

1

Puede probar esto:

System.out.println("ID : " + themeDisplay.getPortletDisplay().getId()); 

System.out.println("InstanceID: " + themeDisplay.getPortletDisplay().getInstanceId()); 

System.out.println("Portlet Name: " + themeDisplay.getPortletDisplay().getPortletName()); 

No se olvide:

<% ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); 
    themeDisplay.getUser().getScreenName(); %> 
Cuestiones relacionadas