-Compartir sesion de Theme a Portlet.
-Compartir sesion de Portlet a Theme.
-Compartir sesion de Portlet a Portlet.
Se tomaran los casos mas resaltantes encontrados, para lo cual ....
Liferay tiene definido un prefijo para los nombres de variables de sesion definido en el portal.properties de la siguiente manera:
# # Portlets that have been configured to use private request attributes in # liferay-portlet.xml may still want to share some request attributes. This # property allows you to configure which request attributes will be shared. # Set a comma delimited list of attribute names that will be shared when the # attribute name starts with one of the specified attribute names. For # example, if you set the value to "hello_,world_", then all attribute names # that start with "hello_" or "world_" will be shared. # request.shared.attributes=LIFERAY_SHARED_
Esto nos indica que toda variable que querramos definir en sesion debe tener el prefijo LIFERAY_SHARED_ pues asi esta definido en el portal para nuestro ejemplo definiremos una variable llamada utm_source que sera definida para su manejo en Liferay de la siguiente manera LIFERAY_SHARED_UTM_SOURCE.
SESION ENTRE THEME Y PORTLET
Crearemos variables de sesion en el theme y lo consumiremos en un Portlet, en el theme ponemos el codigo velocity siguiente donde creamos la variable de sesion.
En el Theme
$request.session.setAttribute("LIFERAY_SHARED_UTM_SOURCE",valor_sesion)
Donde valor_sesion es el valor que queremos poner en sesion.
En el portlet:
PortletSession pSession=resourceRequest.getPortletSession(); String utm_source_actual=(String)pSession.getAttribute( "LIFERAY_SHARED_UTM_SOURCE",PortletSession.APPLICATION_SCOPE);
De esa manera estamos consumiendo la variable de sesion declarada en el Theme, en mi ejemplo usamos un resourceRequest; podemos usar un renderRequest o actionRequest dependiendo de donde lo llamemos.
SESION ENTRE PORTLET Y THEME
Crearemos la variable de sesion en el portlet y lo consumiremos en el theme del portal.
En este caso debemos hacer un paso adicional a lo anterior, configurando el atributo private-session-attributes el liferay-portlet.xml:
<private-session-attributes>false</private-session-attributes>
Con esto estamos poniendo las variables de sesion declaradas dentro del portlet como publicas.
En el portlet
PortletSession pSession=resourceRequest.getPortletSession(); pSession.setAttribute("LIFERAY_SHARED_UTM_SOURCE", valor_sesion,PortletSession.APPLICATION_SCOPE);
De esta manera estamos creando la variable en la sesion para ser consumida dandole el valor de valor_sesion, en mi ejemplo usamos un resourceRequest; podemos usar un renderRequest o actionRequest dependiendo de donde lo llamemos.
En el tema
$request.session.getAttribute("LIFERAY_SHARED_UTM_SOURCE")De esta manera consumimos la variable de sesion creada en el theme.
SESION ENTRE PORTLET Y PORTLET
Crearemos la variable de sesion en el portlet y lo consumiremos desde otro portlet del portal.
En este caso debemos hacer un paso adicional como lo anterior, configurando el atributo private-session-attributes el liferay-portlet.xml:
<private-session-attributes>false</private-session-attributes>
Con esto estamos poniendo las variables de sesion declaradas dentro del portlet como publicas.
En el portlet donde creamos la variable
PortletSession pSession=resourceRequest.getPortletSession(); pSession.setAttribute("LIFERAY_SHARED_UTM_SOURCE", valor_sesion,PortletSession.APPLICATION_SCOPE);
De esta manera estamos creando la variable en la sesion para ser consumida dandole el valor de valor_sesion, en mi ejemplo usamos un resourceRequest; podemos usar un renderRequest o actionRequest dependiendo de donde lo llamemos.
En el portlet donde consumimos la variable:
PortletSession pSession=resourceRequest.getPortletSession(); String utm_source_actual=(String)pSession.getAttribute( "LIFERAY_SHARED_UTM_SOURCE",PortletSession.APPLICATION_SCOPE);
De esa manera estamos consumiendo la variable de sesion declarada en el Theme, en mi ejemplo usamos un resourceRequest; podemos usar un renderRequest o actionRequest dependiendo de donde lo llamemos.
Que sucede en el caso de que la variable de sesion se quiera acceder desde el view.jsp al desplegarlo inicialmente? En ese caso no podemos usar la session de un resourceRequest, actionRequest o renderRequest ya que la vista todavia no lanza la peticion al controlador. Hay alguna forma de hacerlo desde ahi?
ResponderEliminarSiempre al cargar se ira al metodo render ahi podrias setear la variable y pasarla al jsp, sino dentro del mismo jsp usar esto:
Eliminarsession = request.getSession(true);
myobjeto=session.getAttribute("LIFERAY_SHARED_CHAT");
Aunque recomiendo lo primero.
Saludos.