4

Portlet-AとPortlet-Bの2つのポートレットがあります。

ポートレット-Aはデータの初期化を行い、これを共有スコープに格納します。

初期化中のポートレットBには、共有スコープからの(ポートレットAからの)このデータが必要です。

ただし、ポートレットBの前にポートレットAを開始(レンダリング)する必要があることを定義する必要があります。

Liferayによって、初期化の順序、またはポートレットの依存関係のようなものを定義することは可能ですか?

4

2 に答える 2

4

私が正しく理解している場合は、同じページでポートレットBの前にポートレットAをレンダリングする必要があります。

liferay-portlet.xml次に、これを:で定義できます。<render-weight>50</render-weight>よりrender-weight高速にポートレットがレンダリングされます。つまり、render-weightPortlet-BのがPortlet-Aよりも小さい場合は、Portlet-Aの後にレンダリングされます。

DTDrender-weightに関する詳細な説明

お役に立てれば。

于 2012-06-22T05:29:27.593 に答える
3

私の知る限り、Liferayはポートレットの遅延読み込みを行うため、ポートレットの初期化とポートレットのdoView()呼び出しの順序を保証することはできません。

直面している問題は、1つのページで複数のポートレットを操作している場合によくある問題です。

ここで、一般的な回避策は、setterポートレット(この場合はポートレットA)がprocessAction()メソッドのプロパティを設定し、getterポートレット(ポートレットB)がからプロパティを取得する必要があることですdoView()

その理由は、順序を保証することはできませんが、actionURLを起動してdoView()いる場合は、processAction()常にdoView()の前に呼び出されるためです。

そのため、UIのレンダリング中に、この属性を他のすべてのポートレットで使用できるようになります。保証付き!

于 2012-06-21T15:37:56.933 に答える