4

我有两个 Portlet:Portlet-A 和 Portlet-B。

Portlet-A 进行一些数据初始化并将其存储在共享范围内。

初始化期间的 Portlet-B 需要来自共享范围的此数据(来自 Portlet-A)。

但是,我需要定义 Portlet-A 必须在 Portlet-B 之前启动(渲染)。

Liferay 是否可以定义某种初始化顺序,或类似 portlet 依赖项之类的东西?

4

2 回答 2

4

如果我理解正确,您需要在同一页面上的 Portlet-B 之前呈现 Portlet-A。

然后您可以在 中定义liferay-portlet.xml: portlet 渲染<render-weight>50</render-weight>render-weight越快,换句话说,如果render-weightPortlet-B 小于 Portlet-A,那么它将在 Portlet-A 之后渲染。

关于DTDrender-weight的更多解释

希望这可以帮助。

于 2012-06-22T05:29:27.593 回答
3

据我所知,Liferay 对 portlet 进行延迟加载,因此您无法保证 portlet 初始化和 portletdoView()调用的顺序。

当您在单个页面上使用多个 portlet 时,您面临的问题是常见的问题。

在这里,常见的解决方法是,setter portlet(在您的情况下是 portlet A)应该在processAction()方法中设置属性,而 getter portlet(portlet B)应该从doView().

原因是,你不能保证的顺序,doView()但是,如果你正在触发 actionURL,processAction()总是会在 doView() 之前调用。

因此,在呈现 UI 时,所有其他 portlet 都可以使用该属性。保证!

于 2012-06-21T15:37:56.933 回答