希望你做得很好。
这是我的情景。 我有多个(20+)Liferay portlet,它们使用网格/表来显示数据。
每个portlet都会根据不同的标准检索数据。
但是,网格与一些常用功能相同,如过滤,分页,数据导出等。
目前,每次我们必须对网格样式进行更改时,我必须对20多个portlet中的每一个进行更改。 这实在是效率低下,导致大量时间浪费。
因此,我想知道是否可以创建通用的“portlet”或“composite”以便它可以显示来自多个portlet的数据? 详细说明,通用portlet / composite将包含网格,过滤,分页,导出等功能。
这个通用portlet / composite将从各种portlet接收数据并只显示它。
因此,如果我需要对网格样式进行任何更改,只需在一个地方进行更改就足够了。
有没有人经历过这样的情景?
你有解决方案吗?
提前感谢您的帮助。
答案 0 :(得分:1)
如果您只需要按照不同的标准检索数据,具有导出数据,打印,分页等功能,您不需要20多个不同的portlet,您可以使用一个portlet并拥有20多个实例,每个都配置为enable.export,enable.print,data.criteria等。在内部portlet中,您的逻辑将构建您需要的网格和数据。
如果您真的需要Generic Portlet,您可以尝试将所有20 + portlet放在一个.war中。你只需要包含一些在一些portlet中常见的jsp,扩展控制器等。
更多......如果你需要在portlet之间发送数据,你可以创建javascript控制器,它们将相互发送事件,通过Ajax获取数据并填写你的jsps(在这种情况下你可以使用一些模板)。请问是否有不明确的事情。
答案 1 :(得分:0)
最好的解决方案是使用一个portlet来检索所有数据,并使用一个接口和不同的实现来概括数据检索 - 而不是使用不同的端口。
您可以尝试使用Liferay的Interportlet通信工具从源portlet向目标portlet提供数据 - http://www.liferay.com/community/wiki/-/wiki/Main/Inter-portlet+communication
但它有自己的警告 - 你要么必须使用AJAX或JS事件在浏览器中提交数据,要么必须使用在服务器端工作的JSR-286(Portlets 2.0)事件,但需要触发一个一个动作,以使事件发生(即打开portlet与动作URL,而不是渲染URL)。更多相关信息 - http://www.liferay.com/community/wiki/-/wiki/Main/Portlet+to+Portlet+Communication