2017-10-17 7 views
1

PortletPreferencesオブジェクトを使用するTimerTaskを開始する必要があります。要求オブジェクトなしでPortletPreferencesを取得する方法

@ManagedBean(name = "myManagedBean", eager = true) 
@ApplicationScoped 
public class MyManagedBean implements Serializable { 
    static MyUpdateTask updateTask; 

    @PostConstruct 
    public void init(){ 
     try { 
      PortletPreferences portletPrefs = ((PortletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getPreferences(); 
      updateTask = new MyUpdateTask(portletPrefs); 
      MyTaskService.getInstance().update(updateTask); 
     } catch (Exception e) { 
      e.printStackTrace(System.out); 
     } 
    } 
} 

MyTaskService.updateは定期的に私のデータを更新するサービスを生成ScheduledExecutorServiceを使用しています。

は、ここで私は(MyUpdateTaskがここにTimerTaskをを拡張する)今のところ持っているものです。

私は今すぐに問題があります。((PortletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getPreferences();は、現在のところ要求がないため、UnsupportedOperationExceptionをスローします。リクエストなしでPortletPreferencesを取得するにはどうすればよいですか?

タスクのPortletPreferencesオブジェクトが必要です。

答えて

2

あなたはLiferayのポータルを使用している場合は、...ポートレットのライフサイクルの中にRENDER_PHASE

、Liferayのポータルは、(RenderRequestためPortletPreferencesオブジェクトを設定する)render_portlet.jspを実行します。このようなLines 52-54 of render_portlet.jsp外観:

PortletPreferencesIds portletPreferencesIds = 
    PortletPreferencesFactoryUtil.getPortletPreferencesIds(request, portletId); 
PortletPreferences portletPreferences = 
    PortletPreferencesLocalServiceUtil.getStrictPreferences(portletPreferencesIds); 

だから私はあなたがないを行い、オーバーロードPortletPreferencesFactoryUtil.getPortletPreferencesIds(...)の方法のいずれかを呼び出すことをお勧めは、ポートレットに関連した嗜好を取得するためにrequestオブジェクトを取ります。

PortletConfigにアクセスできないので、portletIdをString定数としてハードコードする必要があります。 portletIdを動的に取得する必要がある場合は、@ApplicationScoped beanの代わりに@Override GenericFacesPortlet.init(PortletConfig)とし、そこからTimerTaskを開始することができます。

Liferay Portalを使用していない場合は、PortletRequestのコンテキスト外のPortletPreferencesへのアクセスを許可するポートレットAPIを認識していません。

+0

また、タイマー設定を動的に変更する必要がない場合は、代わりに「」を使用できます。次に、 'FacesContext.getCurrentInstance()。getExternalContext.getInitParam(" myTimerSetting ")'を呼び出すことによって、Beanの設定を取得できます。 – stiemannkj1

+0

残念ながら、私は現在Liferayポータルを使用していません。私はWebSphereを使用しています – Sirmyself

+0

上記のLiferayのPortletPreferencesFactoryUtilに似たベンダー固有の/独自のAPIがWebSphere Portalにあるかどうかを確認することができます。 –

関連する問題