Portlet-AとPortlet-Bの2つのポートレットがあります。
ポートレット-Aはデータの初期化を行い、これを共有スコープに格納します。
初期化中のポートレットBには、共有スコープからの(ポートレットAからの)このデータが必要です。
ただし、ポートレットBの前にポートレットAを開始(レンダリング)する必要があることを定義する必要があります。
Liferayによって、初期化の順序、またはポートレットの依存関係のようなものを定義することは可能ですか?
Portlet-AとPortlet-Bの2つのポートレットがあります。
ポートレット-Aはデータの初期化を行い、これを共有スコープに格納します。
初期化中のポートレットBには、共有スコープからの(ポートレットAからの)このデータが必要です。
ただし、ポートレットBの前にポートレットAを開始(レンダリング)する必要があることを定義する必要があります。
Liferayによって、初期化の順序、またはポートレットの依存関係のようなものを定義することは可能ですか?
私が正しく理解している場合は、同じページでポートレットBの前にポートレットAをレンダリングする必要があります。
liferay-portlet.xml
次に、これを:で定義できます。<render-weight>50</render-weight>
よりrender-weight
高速にポートレットがレンダリングされます。つまり、render-weight
Portlet-BのがPortlet-Aよりも小さい場合は、Portlet-Aの後にレンダリングされます。
DTDrender-weight
に関する詳細な説明
お役に立てれば。
私の知る限り、Liferayはポートレットの遅延読み込みを行うため、ポートレットの初期化とポートレットのdoView()
呼び出しの順序を保証することはできません。
直面している問題は、1つのページで複数のポートレットを操作している場合によくある問題です。
ここで、一般的な回避策は、setterポートレット(この場合はポートレットA)がprocessAction()
メソッドのプロパティを設定し、getterポートレット(ポートレットB)がからプロパティを取得する必要があることですdoView()
。
その理由は、順序を保証することはできませんが、actionURLを起動してdoView()
いる場合は、processAction()
常にdoView()の前に呼び出されるためです。
そのため、UIのレンダリング中に、この属性を他のすべてのポートレットで使用できるようになります。保証付き!