我尝试在自定义Liferay portlet中呈现带有嵌套portlet的布局模板。 Liferay拥有自己的嵌套Portlet" portlet使用view.jsp中的RuntimePortletUtil执行它:
RuntimePortletUtil.processTemplate(application, request, response, pageContext, out, velocityTemplateId, velocityTemplateContent);
但是,当我在portlet中执行相同操作时,只要在布局模板中放入任何portlet,就会出现以下错误:
[render_portlet_jsp:157] javax.servlet.ServletException: File "/html/portal/render_portlet.jsp" not found
at org.apache.jasper.servlet.JspServlet.handleMissingResource(JspServlet.java:412)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
RuntimePortletUtil只能在Liferay portlet上下文中使用,还是有办法在我自己的portlet中使用它?
答案 0 :(得分:0)
看起来实现需要一个你可能没有的文件/html/portal/render_portlet.jsp。它可能就像检查该文件一样简单,看看您是否只需要它或更多资源。
然而,我建议您查看您想要解决的基本问题,而不是寻找该实现:IMHO布局模板是目前Liferay中最简单的插件类型。我看到的嵌套布局模板的所有示例看起来更像是一个快速的黑客,而不是一个正确的解决方案。我的建议是提供一些自定义布局模板:它通常不会是大量的,因为增加的布局数量通常会让最终用户感到困惑。
NestedPortlet是在Liferay的核心内部实现的,不会对外面的运行做出任何假设。虽然根据服务器实现它可能不是最好的架构决策,但是没有人注意使代码能够在门户之外运行 - 通过检查不同的解决方案来帮助自己,让自己更轻松。