1

両方の値を取得したいのですが、ポートレットのロード時に init(Portletconfig) が実行されるため、この値を使用できるかどうかについて疑いはありません。

私が試したportletIdについて

String portletId = ((PortletConfigImpl) portletConfig).getPortletId(); 

しかし、私はできないようです。implがポートレットからアクセスすることを意図していない別のjarにあるためだと思います

ちなみに、私の主な目標は、両方のパラメーターを別の非要求コンテキストに渡すことです。

final PortletPreferences prefs = PortletPreferencesFactoryUtil.getLayoutPortletSetup(LayoutLocalServiceUtil.getLayout(plid), portletId);

ポートレットの設定をリアルタイムで読み取る。init() からそれを示す他の方法がある場合、全体の設定を取得するなど、それで十分です

編集:別のアプローチを見つけ、 Liferay をわずかに変更して新しい質問を開きました: init() から PortletID と companyID を取得します

4

3 に答える 3

2

init(PortletConfig config)ポートレット初期化の構成を取得する場合は、からメソッドをオーバーライドできます。GenericPortlet

パブリッククラスMyLiferayTestPortletはMVCPortletを拡張します{

  @Override
  public void init(PortletConfig config) throws PortletException {
    System.out.println("~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ init");
    super.init(config);
    Enumeration<String> parameterNames = config.getInitParameterNames();
    while(parameterNames.hasMoreElements()) {
        String name = parameterNames.nextElement();
        System.out.println("Parameter: " + name + " = " + config.getInitParameter(name));
    }
    System.out.println("~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ /init");
  }
}
于 2012-09-06T07:54:47.613 に答える
1

設定の取得コードをレンダリング フェーズに入れ、設定が検証されたときにフラグを立ててみませんか? この方法では、一度だけ実行する必要があります。

たとえば、コントローラーには静的フィールドがあります

private static boolean checked = false;

そして、レンダリング段階で、チェックします

if(!checked) {
//validate preferences
checked = true;
}
于 2012-09-07T20:20:47.773 に答える