¿Puedo hacer que un portlet basado en puntales recuerde su vista cuando se utiliza otro portlet?
-
05-07-2019 - |
Pregunta
He escrito un portlet bastante básico utilizando el puente de portlet de struts y lo implementé en el ciclo de vida útil, la navegación dentro de mi portlet parece estar bien, pero cada vez que hago clic en un enlace en otro portlet en el portal, mi portlet vuelve a la configuración de la acción de visualización en mi portlet.xml en lugar de volver a representar el estado existente. ¿Qué estoy haciendo mal?
Mi portlet.xml
es:
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
<portlet>
<portlet-name>test</portlet-name>
<display-name>Test</display-name>
<portlet-class>com.perceptive.ctms.test.portlet.TestPortlet</portlet-class>
<init-param>
<name>ServletContextProvider</name>
<value>com.liferay.util.bridges.struts.LiferayServletContextProviderWrapper</value>
</init-param>
<init-param>
<name>StrutsPortletConfigLocation</name>
<value>/WEB-INF/struts-portlet-config.xml</value>
</init-param>
<init-param>
<name>HelpPage</name>
<value>/portlet_action/test/help</value>
</init-param>
<init-param>
<name>ViewPage</name>
<value>/portlet_action/test/start</value>
</init-param>
<init-param>
<name>EditPage</name>
<value>/portlet_action/test/preferences</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>
<portlet-info>
<title>Test</title>
<short-title>Test</short-title>
<keywords>Test</keywords>
</portlet-info>
</portlet>
<filter>
<filter-name>AuthenticationFilter</filter-name>
<filter-class>com.perceptive.ctms.framework.portlet.filter.AuthenticationFilter</filter-class>
<lifecycle>RENDER_PHASE</lifecycle>
<lifecycle>ACTION_PHASE</lifecycle>
</filter>
<filter-mapping>
<filter-name>AuthenticationFilter</filter-name>
<portlet-name>test</portlet-name>
</filter-mapping>
</portlet-app>
y struts-portlet-config.xml
es:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<render-context>
<attribute name="errors"/>
<attribute name="message" keep="true"/>
<attribute prefix="com.perceptive" keep="true"/>
</render-context>
<portlet-url-type default="render">
<render path="/test/help.do"/>
<render path="/test/start.do"/>
<render path="/test/preferences.do"/>
<render path="/test/tableTest.do"/>
<render path="/test/displayTagTest.do"/>
<render path="/test/lookupTest.do"/>
<render path="/test/lookupTestSave.do"/>
</portlet-url-type>
</config>
PD: Ya he preguntado esto en los foros de la vida útil, pero también pregunto aquí con la esperanza de una respuesta rápida.
Solución
En el portlet.xml
intente cambiar la línea:
<expiration-cache>0</expiration-cache>
que significa que la versión en caché del portlet caduca inmediatamente a:
<expiration-cache>-1</expiration-cache>
lo que significa que nunca caduca. Desde el portlet-app_2_0.xsd
:
<annotation>
<documentation>
Expiration-time defines the time in seconds after which the portlet output expires.
-1 indicates that the output never expires.
Used in: portlet
</documentation>
</annotation>