gpt4 book ai didi

liferay - 在5.2 EE SP5或6.x中的Liferay布局模板(非主题)中嵌入portlet

转载 作者:行者123 更新时间:2023-12-01 05:36:10 25 4
gpt4 key购买 nike

我们在Liferay 5.2实例上托管了多个站点,这些站点由多个社区,主题和布局模板组成,它们均按预期工作。但是,此设置不再适用于5.2的EE Service Pack(特别是最新的EE SP5-与5.2.9相同)或最新的6.0.6(CE)。 (另外的测试表明,这最后一次在EE SP3 / 5.2.7中有效,但是在EE SP4 / 5.2.8中成为问题。)我们紧急需要升级到最新的5.2 Service Pack(EE SP5),以解决其他问题-但是升级到Liferay 6也是可行的选择,只要我们能够找到可行的解决方案和版本的组合即可。

特别是,我们在主题中有一些文件(例如inc-side.vm)作为主题的一部分包含在布局模板中。这样,内容就可以由主题“拥有”,但是可以在各种布局模板的上下文中使用-即使在多个站点(社区/主题)中使用相同的布局模板也是如此。将此内容直接放置在主题中(不涉及布局模板)不是一种选择,因为它需要放置在布局的UI空间中,并且各种布局可能要求此内容相对于主题位于不同的空间中。主题。

另一个要求是,此包含的内容必须由“嵌入式” portlet组成-即,不要将其拖放到每页UI中,而是与每个主题/布局相关联。通过简单地将主题+布局应用于站点/页面,正确的portlet会自动包含在每个页面中。这是必要的,因为某些站点/社区包含大约100或更多的页面,每页添加此内容并保持一致而不嵌入主题+布局将是不切实际或不可维护的。 (仅考虑10个主题(社区)* 10个布局模板* 10页/社区= 1,000个要配置和维护的组合。)

同样,这一切都在5.2.3(包括5.2 EE SP1,SP2和SP3)下运行-但从5.2 EE SP4开始停止运行。我们是Liferay企业支持客户,并且已经开放了将近2个月的支持通知单,但尚未提供解决方案。在发行说明中未提及任何相关内容,并且我们尚未从Liferay获得任何有关更改原因的指导或任何成功的解决方法。

以下是当前问题的一些具体信息:

在任何新安装的5.2 EE SP4或SP5下,都可以轻松,始终如一地重现。

在主题的inc-side.vm目录下包括templates。主题没有什么特别的-即使使用Liferay默认的“经典”主题的副本也可以使用。

inc-side.vm中,包括以下内容:

<p>Before Diagnostics</p>
$theme.runtime("27_INSTANCE_0000", "", $velocityPortletPreferences.toString())
$velocityPortletPreferences.reset()
<p>After Diagnostics</p>


请注意,“ 27”是Liferay缺省提供的portlet,用于简化操作,并说明此问题并非特定于任何定制开发的portlet。但是,我也从头开始创建了自己的“诊断portlet”,它演示了完全相同的问题。

在布局模板(* .tpl)中,包括以下几行:

#set ($contextName = $themeDisplay.getTheme().getContextPath())
#set ($themeContext = $request.getAttribute("CTX").getContext($contextName))
#evaluate ($theme.include($themeContext, "/templates/inc-side.vm"))


这遵循 http://www.liferay.com/community/forums/-/message_boards/message/772138所示的相同方法。

根据支持票中的建议,我还尝试了以下1行替代上述行:

#parse ("$fullTemplatesPath/inc-side.vm")


(请注意 $fullTemplatesPath$full_templates_path。原因是 init.vm调用 #set ($full_templates_path = $fullTemplatesPath)-但是 init.vm不包含在模板中,仅包含主题。)

两种方法的结果都是相同的。 inc-side.vm中包含的任何静态文本/ HTML都会按预期显示。任何Velocity指令都会被解析和处理,并且不会显示在输出中。在portlet中进行记录表明它已经执行,甚至可以检索设置为 velocityPortletPreferences的任何portlet首选项。根本问题是,Portlet生成的任何内容都不会呈现给HTTP响应。实际上,通过Firefox的“查看/源”或cURL查看,响应中包含的内容完全是:

<p>Before Diagnostics</p>
<p>After Diagnostics</p>


在我的自定义portlet中,我什至尝试调用在响应中可以找到的每个 flush()close()方法,认为这是与刷新相关的问题。

相反,在Liferay 6.0.6下进行测试(假设这可能只是5.2系列问题),结果却不同但有趣。随附的* .vm文件已成功读入页面。但是,它没有被评估为速度代码。与5.2 SP5中包含的VM正在执行但不渲染的情况不同,6.0.6在渲染但不评估(或执行)的情况。

我们已经审查了 http://www.liferay.com/web/raymond.auge/blog/-/blogs/11180056(“在Liferay中将portlet嵌入主题中”),并且上述方法确实是“方法之一”。 “方法二”是不可接受的选项,因为使用 <iframe>会导致页面的DOM(特别是JavaScript IPC)的DOM问题-并且这还需要提前知道每个portlet的UI大小。 ,这是不切实际或无法接受的。



我们希望更熟悉Liferay和/或Apache Velocity模板引擎(由Liferay使用)的人可以为该问题提供解决方案或其他可接受的解决方法。我将提供所有其他详细信息或说明。

谢谢!

最佳答案

Liferay修补程序lpe5096-ee5209-portal-kernel-jdk6.jar解决了此问题。我有效使用的是Liferay在2011-12-29上提供的,SHA-1校验和为adb6e0590bfc4850c127a792515941d6de5d385e

关于liferay - 在5.2 EE SP5或6.x中的Liferay布局模板(非主题)中嵌入portlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com