0

ポータル開発に Liferay 6 を使用しています。

Liferay 開発者ガイドを読み進めることで、著者は、ポートレットの実行には 2 つのフェーズがあることを説明しています。

  1. アクションフェーズ
  2. レンダリング フェーズ
public class DateTimePortlet extends GenericPortlet 
{
    public void doView(RenderRequest req, RenderResponse res) throws IOException, PortletException 
    {        
        Object actionAttribute = req.getAttribute("datetime");
        res.getWriter().println("Date Time:" + (actionAttribute != null ? actionAttribute :"Unavailable"));
        res.getWriter().println("<BR/>");
        PortletURL u = res.createActionURL();
        res.getWriter().println("<A href=" + u + ">Trigger an action.");
        res.getWriter().close();
    }

    public void processAction(ActionRequest req, ActionResponse res) throws PortletException 
    {
        req.setAttribute("datetime",new Date());
    }        
}

私の理解では、doViewメソッドは「レンダリング フェーズ」としてprocessAction知られ、メソッドは「アクション フェーズ」として知られています。

また、1 つのページに 5 つのポートレットが表示されている場合、「レンダリング フェーズ」(メソッド内のコードdoView) は、ページが更新されるたびに実行されます。

私が正しいかどうか教えてください。

4

1 に答える 1

7

はい、正解です。最大です。リクエストごとに 1 つのポートレットがアクションを処理しますが、ページ上のすべてのポートレットでレンダリング リクエストが実行されます (出力がキャッシュされている場合を除きますが、このかなり高度な処理は脇に置いておきます)。

また、レンダリングのみが完了したときに、リクエストでアクション処理が0になることもあります(これは、ポートレットで通常実行される最も一般的な操作です。このフェーズでは状態を変更する必要があります(変更できません))。

アクションに続いて、任意の数のポートレットで実行できるイベント フェーズをトリガーできます (ポートレット間通信、IPC を参照)。

ページ全体をリロードしたくない場合は、AJAX 呼び出しを処理し、ポートレットが提供する通常のページ フラグメント以外のあらゆる種類のさまざまなリソースを提供できるリソース フェーズを調べる必要があります。

于 2012-07-04T16:49:55.110 に答える