留言板

Liferay Classic Theme Bug

Edward A,修改在6 年前。

Liferay Classic Theme Bug

New Member 帖子: 23 加入日期: 17-6-16 最近的帖子
We have an issue with Web Content and Structures when these are added to a page template. Let me tell you how to duplicate this issue:

  • Create a new Structure for web content.
  • Create a template
  • Create a new web content asset using the structure and template that you just created.
  • Create a new Page Template.
  • From the Applications Menu, drag and drop the Web Display App.
  • On the Configuration menu, choose to select the items displayed manually, and select the Web Content Asset we just created.


Once you click on Save, the Asset won't appear on the screen, and Liferay will throw an Exception. I'm including the stack trace, and, based on that, Ithink that the issue might come from the classic theme's portlet.ftl template on line 17.

If this is an issue with Liferay, and I should request for this bug to be checked by the development team, please let me know. Otherwise, please tell me what I'm doing wrong.

Thanks!


INFO

Liferay Version: Liferay Community Edition Portal 7.0.3 GA4 (Wilberforce / Build 7003 / June 19, 2017)
Server: Tomcat 8.0.32
Database: MySQL

Stack Trace

23:15:13,011 ERROR [http-nio-8080-exec-9][runtime:60] Error executing FreeMarker template
FreeMarker template error:
Java method "com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconMenu.getPortletConfigurationIcons(String, javax.portlet.PortletRequest, javax.portlet.PortletResponse)" threw an exception when invoked on com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconMenu object "com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconMenu@359b8895"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: portlet_configuration_icons = portlet...  [in template "classic-theme_SERVLET_CONTEXT_/templates/portlet.ftl" at line 17, column 25]
	- Reached through: #assign-container  [in template "classic-theme_SERVLET_CONTEXT_/templates/portlet.ftl" at line 13, column 17]
----

Java stack trace (for programmers):
----
freemarker.core._TemplateModelException: [... Exception message was already printed; see it above ...]
	at freemarker.ext.beans._MethodUtil.newInvocationTemplateModelException(_MethodUtil.java:311)
	at freemarker.ext.beans._MethodUtil.newInvocationTemplateModelException(_MethodUtil.java:275)
	at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:80)
	at freemarker.core.MethodCall._eval(MethodCall.java:62)
	at freemarker.core.Expression.eval(Expression.java:78)
	at freemarker.core.Assignment.accept(Assignment.java:131)
	at freemarker.core.Environment.visit(Environment.java:324)
	at freemarker.core.AssignmentInstruction.accept(AssignmentInstruction.java:54)
	at freemarker.core.Environment.visit(Environment.java:324)
	at freemarker.core.MixedContent.accept(MixedContent.java:54)
	at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48)
	at freemarker.core.Environment.visit(Environment.java:324)
	at freemarker.core.MixedContent.accept(MixedContent.java:54)
	at freemarker.core.Environment.visit(Environment.java:324)
	at freemarker.core.Environment.process(Environment.java:302)
	at freemarker.template.Template.process(Template.java:325)
	at com.liferay.portal.template.freemarker.internal.FreeMarkerTemplate.processTemplate(FreeMarkerTemplate.java:135)
	at com.liferay.portal.template.AbstractSingleResourceTemplate.processTemplate(AbstractSingleResourceTemplate.java:78)
	at com.liferay.taglib.util.ThemeUtil.doIncludeFTL(ThemeUtil.java:284)
	at com.liferay.taglib.util.ThemeUtil.doDispatch(ThemeUtil.java:157)
	at com.liferay.taglib.util.ThemeUtil.includeFTL(ThemeUtil.java:100)
	at com.liferay.taglib.util.ThemeUtil.include(ThemeUtil.java:82)
	at com.liferay.taglib.theme.WrapPortletTag.doEndTag(WrapPortletTag.java:101)
	at org.apache.jsp.html.common.themes.portlet_jsp._jspService(portlet_jsp.java:1863)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:64)
	at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.doDispatch(ClassLoaderRequestDispatcherWrapper.java:78)
	at com.liferay.portal.servlet.ClassLoaderRequestDispatcherWrapper.include(ClassLoaderRequestDispatcherWrapper.java:53)
	at com.liferay.taglib.util.IncludeTag.includePage(IncludeTag.java:372)
	at com.liferay.taglib.util.IncludeTag.include(IncludeTag.java:349)
	at com.liferay.taglib.util.IncludeTag.doInclude(IncludeTag.java:202)
	at com.liferay.taglib.util.IncludeTag.doEndTag(IncludeTag.java:86)
	at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(render_005fportlet_jsp.java:1871)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:64)
	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._render(PortletContainerImpl.java:707)
	at com.liferay.portlet.PortletContainerImpl.render(PortletContainerImpl.java:162)
	at com.liferay.portlet.SecurityPortletContainerWrapper.render(SecurityPortletContainerWrapper.java:133)
	at com.liferay.portlet.RestrictPortletContainerWrapper.render(RestrictPortletContainerWrapper.java:133)
	at com.liferay.portal.kernel.portlet.PortletContainerUtil.render(PortletContainerUtil.java:161)
	at com.liferay.portal.action.RenderPortletAction.execute(RenderPortletAction.java:112)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
	at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:170)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
	at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:606)
	at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:583)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:119)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.uploadservletrequest.UploadServletRequestFilter.processFilter(UploadServletRequestFilter.java:93)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:336)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:125)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:337)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.jsoncontenttype.JSONContentTypeFilter.processFilter(JSONContentTypeFilter.java:42)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.processFilter(AutoLoginFilter.java:261)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.sharepoint.SharepointFilter.processFilter(SharepointFilter.java:88)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.processFilter(VirtualHostFilter.java:265)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:142)
	at com.liferay.portal.monitoring.internal.servlet.filter.MonitoringFilter.processFilter(MonitoringFilter.java:181)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
	at com.liferay.portal.servlet.filters.urlrewrite.UrlRewriteFilter.processFilter(UrlRewriteFilter.java:65)
	at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:48)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:207)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:112)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:168)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:168)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDirectCallFilter(InvokerFilterChain.java:188)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:96)
	at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:99)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.getArticleDisplay(JournalContentDisplayContext.java:183)
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.isShowArticle(JournalContentDisplayContext.java:793)
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.<init>(JournalContentDisplayContext.java:909)
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.create(JournalContentDisplayContext.java:103)
	at com.liferay.journal.content.web.internal.portlet.configuration.icon.BaseJournalArticlePortletConfigurationIcon.getJournalContentDisplayContext(BaseJournalArticlePortletConfigurationIcon.java:45)
	at com.liferay.journal.content.web.internal.portlet.configuration.icon.EditJournalArticlePortletConfigurationIcon.isShow(EditJournalArticlePortletConfigurationIcon.java:69)
	at com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconTracker._getPortletConfigurationIcons(PortletConfigurationIconTracker.java:150)
	at com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconTracker.getPortletConfigurationIcons(PortletConfigurationIconTracker.java:51)
	at com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconMenu.getPortletConfigurationIcons(PortletConfigurationIconMenu.java:32)
	at sun.reflect.GeneratedMethodAccessor1132.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1458)
	at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:71)
	... 140 more
23:15:13,015 ERROR [http-nio-8080-exec-9][IncludeTag:128] Current URL /group/template-30231/con-header generates exception: javax.servlet.jsp.JspException: com.liferay.portal.kernel.template.TemplateException: Unable to process template classic-theme_SERVLET_CONTEXT_/templates/portlet.ftl
java.lang.NullPointerException
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.getArticleDisplay(JournalContentDisplayContext.java:183)
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.isShowArticle(JournalContentDisplayContext.java:793)
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.<init>(JournalContentDisplayContext.java:909)
	at com.liferay.journal.content.web.internal.display.context.JournalContentDisplayContext.create(JournalContentDisplayContext.java:103)
	at com.liferay.journal.content.web.internal.portlet.configuration.icon.BaseJournalArticlePortletConfigurationIcon.getJournalContentDisplayContext(BaseJournalArticlePortletConfigurationIcon.java:45)
	at com.liferay.journal.content.web.internal.portlet.configuration.icon.EditJournalArticlePortletConfigurationIcon.isShow(EditJournalArticlePortletConfigurationIcon.java:69)
	at com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconTracker._getPortletConfigurationIcons(PortletConfigurationIconTracker.java:150)
	at com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconTracker.getPortletConfigurationIcons(PortletConfigurationIconTracker.java:51)
	at com.liferay.portal.kernel.portlet.configuration.icon.PortletConfigurationIconMenu.getPortletConfigurationIcons(PortletConfigurationIconMenu.java:32)
	at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1458)
	at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:71)
	at freemarker.core.MethodCall._eval(MethodCall.java:62)
	at freemarker.core.Expression.eval(Expression.java:78)
	at freemarker.core.Assignment.accept(Assignment.java:131)
	at freemarker.core.Environment.visit(Environment.java:324)
	at freemarker.core.AssignmentInstruction.accept(AssignmentInstruction.java:54)
	at freemarker.core.Environment.visit(Environment.java:324)
	at freemarker.core.MixedContent.accept(MixedContent.java:54)
	at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)
	at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:48)

</init></init>


Structure:

{
    "availableLanguageIds": [
        "en_US"
    ],
    "defaultLanguageId": "en_US",
    "fields": [
        {
            "label": {
                "en_US": "Link"
            },
            "predefinedValue": {
                "en_US": ""
            },
            "style": {
                "en_US": ""
            },
            "tip": {
                "en_US": ""
            },
            "dataType": "string",
            "indexType": "keyword",
            "localizable": true,
            "name": "Link",
            "readOnly": false,
            "repeatable": true,
            "required": false,
            "showLabel": true,
            "type": "text"
        }
    ]
}


Template (very simple)


&lt;#if Link.getSiblings()?has_content&gt;
	&lt;#list Link.getSiblings() as cur_Link&gt;
		${cur_Link.getData()}
	<!--#list-->
<!--#if-->
thumbnail
Massimo Bevilacqua,修改在6 年前。

RE: Liferay Classic Theme Bug

Regular Member 帖子: 210 加入日期: 16-12-27 最近的帖子
Hi,
could you please copy your structure and template?

If I create a new structure and template and I display it with web content display it works for me, so I guess maybe there is something in your template
Edward A,修改在6 年前。

RE: Liferay Classic Theme Bug

New Member 帖子: 23 加入日期: 17-6-16 最近的帖子
I have edited my original post. Thanks for your help.
thumbnail
Massimo Bevilacqua,修改在6 年前。

RE: Liferay Classic Theme Bug

Regular Member 帖子: 210 加入日期: 16-12-27 最近的帖子
Hi,

I have done this:

- copyed your structure (called Link Structure)
- copyed your template (called Link Template)
- created a web content with 2 links using this structure (called Test Link)
- Add in a page a web content display
- Chose the "Test Link" as web content to display

All works fine

I tested it Liferay 7 Ga 4 and 7 Ga 3

I remember I had this error months ago...I was not able to solve it at the end I reinstalled a new liferay instance.