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