Fórumok

including self-developed portlet with <portal:runtime>

thumbnail
Stefan Finke, módosítva 8 év-val korábban

including self-developed portlet with <portal:runtime>

New Member Bejegyzések: 8 Csatlakozás dátuma: 2014.06.03. Legújabb bejegyzések
Hello,
I'm trying to include a (simple) portlet into another by <portal:runtime>.
Including built-in protlets e.g. Language Portlet succeeds. But including my own self-developed portlet results in rendering error with following stack trace:

Dez 04, 2015 2:06:22 PM org.apache.catalina.core.ApplicationDispatcher invoke
SCHWERWIEGEND: Servlet.service() for servlet liferayportlettest Servlet threw exception
java.lang.NullPointerException
	at com.liferay.faces.util.context.internal.FacesContextUtilImpl.release(FacesContextUtilImpl.java:49)
	at org.primefaces.context.PrimeFacesContext.release(PrimeFacesContext.java:53)
	at com.liferay.faces.bridge.internal.BridgePhaseBaseImpl.cleanup(BridgePhaseBaseImpl.java:120)
	at com.liferay.faces.bridge.internal.BridgePhaseRenderImpl.cleanup(BridgePhaseRenderImpl.java:122)
	at com.liferay.faces.bridge.internal.BridgePhaseRenderImpl.execute(BridgePhaseRenderImpl.java:107)
	at com.liferay.faces.bridge.internal.BridgeImpl.doFacesRequest(BridgeImpl.java:135)
	at javax.portlet.faces.GenericFacesPortlet.doView(GenericFacesPortlet.java:258)
	at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:328)
	at javax.portlet.faces.GenericFacesPortlet.doDispatch(GenericFacesPortlet.java:207)
	at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
	at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:103)
	at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:55)
	at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
	at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64)
	at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:112)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:605)
	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:544)
	at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:583)
	at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImpl.java:656)
	at com.liferay.portlet.InvokerPortletImpl.render(InvokerPortletImpl.java:362)
	at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(render_005fportlet_jsp.java:1233)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:57)
	at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)
	at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)
	at com.liferay.portlet.PortletContainerImpl._doRender(PortletContainerImpl.java:655)
	at com.liferay.portlet.PortletContainerImpl.render(PortletContainerImpl.java:138)
	at com.liferay.portlet.SecurityPortletContainerWrapper.render(SecurityPortletContainerWrapper.java:141)
	at com.liferay.portlet.RestrictPortletContainerWrapper.render(RestrictPortletContainerWrapper.java:126)
	at com.liferay.portal.kernel.portlet.PortletContainerUtil.render(PortletContainerUtil.java:156)
	at com.liferay.portal.layoutconfiguration.util.PortletRenderer._render(PortletRenderer.java:125)
	at com.liferay.portal.layoutconfiguration.util.PortletRenderer.access$4(PortletRenderer.java:107)
	at com.liferay.portal.layoutconfiguration.util.PortletRenderer$PortletRendererCallable.doCall(PortletRenderer.java:180)
	at com.liferay.portal.layoutconfiguration.util.PortletRenderer$PortletRendererCallable.doCall(PortletRenderer.java:1)
	at com.liferay.portal.kernel.executor.CopyThreadLocalCallable.call(CopyThreadLocalCallable.java:69)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask._runTask(ThreadPoolExecutor.java:682)
	at com.liferay.portal.kernel.concurrent.ThreadPoolExecutor$WorkerTask.run(ThreadPoolExecutor.java:593)
	at java.lang.Thread.run(Thread.java:745)

14:06:22,589 ERROR [RuntimePageImpl-6][render_portlet_jsp:132] null
java.lang.NullPointerException
	at com.liferay.faces.util.context.internal.FacesContextUtilImpl.release(FacesContextUtilImpl.java:49)
	at org.primefaces.context.PrimeFacesContext.release(PrimeFacesContext.java:53)
	at com.liferay.faces.bridge.internal.BridgePhaseBaseImpl.cleanup(BridgePhaseBaseImpl.java:120)
	at com.liferay.faces.bridge.internal.BridgePhaseRenderImpl.cleanup(BridgePhaseRenderImpl.java:122)
	at com.liferay.faces.bridge.internal.BridgePhaseRenderImpl.execute(BridgePhaseRenderImpl.java:107)
	at com.liferay.faces.bridge.internal.BridgeImpl.doFacesRequest(BridgeImpl.java:135)
	at javax.portlet.faces.GenericFacesPortlet.doView(GenericFacesPortlet.java:258)
	at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:328)
	at javax.portlet.faces.GenericFacesPortlet.doDispatch(GenericFacesPortlet.java:207)
	at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
	at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:103)
	at com.liferay.portlet.ScriptDataPortletFilter.doFilter(ScriptDataPortletFilter.java:55)
	at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
	at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64)
	at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:112)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:96)
F, lastUpdate: 1449237507396, now: 1449237983299, renew: false


What am I doing wrong? Any Hints?

liferay-faces-version: 4.2.5-ga6
liferay-server: 6.2-ce-ga3

liferay-portlet.xml
<!--?xml version="1.0"?-->


<liferay-portlet-app>

	<portlet>
		<portlet-name>liferay-portlet-test</portlet-name>
		<icon>/icon.png</icon>
		<requires-namespaced-parameters>false</requires-namespaced-parameters>
		<ajaxable>true</ajaxable>
		<header-portlet-css>/resources/css/main.css</header-portlet-css>
	</portlet>
	
	<portlet>
		<portlet-name>liferay-portlet-test-include</portlet-name>
		<icon>/icon.png</icon>
		<requires-namespaced-parameters>false</requires-namespaced-parameters>
		<ajaxable>true</ajaxable>
		<header-portlet-css>/resources/css/main.css</header-portlet-css>
	</portlet>

</liferay-portlet-app>


portlet.xml
<!--?xml version="1.0"?-->

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">

	<portlet>
		<portlet-name>liferay-portlet-test</portlet-name>
		<display-name>liferay-portlet-test</display-name>
		<portlet-class>javax.portlet.faces.GenericFacesPortlet</portlet-class>
		<init-param>
			<name>javax.portlet.faces.defaultViewId.view</name>
			<value>/views/main.xhtml</value>
		</init-param>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
		</supports>
		<portlet-info>
			<title>liferay-portlet-test</title>
			<short-title>liferay-portlet-test</short-title>
			<keywords>liferay-portlet-test</keywords>
		</portlet-info>
	</portlet>
	
	<portlet>
		<portlet-name>liferay-portlet-test-include</portlet-name>
		<display-name>liferay-portlet-test-include</display-name>
		<portlet-class>javax.portlet.faces.GenericFacesPortlet</portlet-class>
		<init-param>
			<name>javax.portlet.faces.defaultViewId.view</name>
			<value>/views/include.xhtml</value>
		</init-param>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
		</supports>
		<portlet-info>
			<title>liferay-portlet-test-include</title>
			<short-title>liferay-portlet-test-include</short-title>
			<keywords>liferay-portlet-test-include</keywords>
		</portlet-info>
	</portlet>

</portlet-app>


"outer" portlet
[...]
<h:body>
	<h:form id="main_form">
		<h2>Hello Liferay</h2>
		<portal:runtime portletName="82" />
		<portal:runtime portletName="liferayportlettestinclude_WAR_liferayportlettestportlet" />
	</h:form>
</h:body>
[...]


included portlet
[...]
<h:body>
	<h:form id="main_form">
		<h2>Hello include</h2>
	</h:form>
</h:body>
[...]
thumbnail
Juan Gonzalez, módosítva 8 év-val korábban

RE: including self-developed portlet with <portal:runtime>

Liferay Legend Bejegyzések: 3089 Csatlakozás dátuma: 2008.10.28. Legújabb bejegyzések
Can you try checking these two things?:

  • Remove <ajaxable> from liferay-portlet.xml for both portlets
  • Try with 6.2 CE GA5


If that doesn't work, please attach here that sample portlet..

Thanks!
thumbnail
Stefan Finke, módosítva 8 év-val korábban

RE: including self-developed portlet with <portal:runtime>

New Member Bejegyzések: 8 Csatlakozás dátuma: 2014.06.03. Legújabb bejegyzések
Hello Juan. Thank you for your quick reply.

I removed <ajaxable> tag and installed Liferay 6.2 CE ga5.
I also removed some needless (primefaces) dependencies from my project.
Tried again. No effect.

So I attached my sample project's archive...
thumbnail
Juan Gonzalez, módosítva 8 év-val korábban

RE: including self-developed portlet with <portal:runtime>

Liferay Legend Bejegyzések: 3089 Csatlakozás dátuma: 2008.10.28. Legújabb bejegyzések
Hi Stephan,

thanks for the sample portlet. Vacation days in Spain until Wednesday. Will check this then.
thumbnail
Juan Gonzalez, módosítva 8 év-val korábban

RE: including self-developed portlet with <portal:runtime>

Liferay Legend Bejegyzések: 3089 Csatlakozás dátuma: 2008.10.28. Legújabb bejegyzések
Hi Stefan,

thanks again! I could reproduce the issue and created a new ticket: https://issues.liferay.com/browse/FACES-2527.

Meanwhile, as a workaround, can you separate both include and "parent" portlets as different portlet projects? This way works fine. BTW, when naming a project don't include "portlet" in it's name, as that is used by Liferay to differentiate plugin types. All text after "-portlet" will be ignored.

Thanks!