我有两个portlet:Portlet-A和Portlet-B。
Portlet-A进行一些数据初始化并将其存储在共享范围内。
初始化期间的Portlet-B需要来自共享范围的此数据(来自Portlet-A)。
但是,我需要定义Portlet-A必须在Portlet-B之前启动(呈现)。
Liferay是否可以定义一些初始化顺序,或类似于portlet依赖?
答案 0 :(得分:4)
如果我理解正确,您需要在同一页面上的Portlet-B之前呈现Portlet-A。
然后你可以在liferay-portlet.xml
:<render-weight>50</render-weight>
中定义它,render-weight
越多,portlet将呈现的速度越快,换句话说,如果Portlet的render-weight
- B小于Portlet-A然后它将在Portlet-A之后呈现。
有关DTD
中render-weight
的更多说明
希望这有帮助。
答案 1 :(得分:3)
据我所知,Liferay对portlet进行了延迟加载,因此你无法保证portlet初始化的顺序以及portlet doView()
调用。
当您在单个页面上使用多个Portlet时,您遇到的问题是常见问题。
这里,常见的解决方法是,setter portlet(在你的case portlet A中)应该在processAction()
方法中设置属性,而getter portlet(portlet B)应该从doView()
获取。
原因是因为你不能保证doView()
的顺序,但是,如果你正在触发actionURL,那么在doView()之前总会调用processAction()
。
因此,在呈现UI时,该属性将可用于所有其他portlet。存在保证!