0

現在、ポートレットで1つの問題に直面しています。JSF2を使用する環境です。

アプリケーションは、実際のユーザーセッション用の動的ポータルページを作成しています...ユーザーがエンティティを編集できるEclipseエディタービューと考えてください。だから今のところ私はダイナミックビューエディタと呼んでいます:-)

私たちが今直面している問題は次のとおりです。ユーザーはエディターに移動し、ポートレットで作業します。もちろん、各ポートレットに表示されるビューは時間の経過とともに変化します。今、彼は別のエディターに表示されている別のエンティティを調べたいと思っています。しかし、彼が最初のエディターに戻ると、ポートレットの状態はデフォルトのビューに戻ります。

ポートレットの世界では、各ポートレットは、PortletSessionに格納されているパラメータを介して表示する必要のあるビューを取得し、そのパラメータも簡単に変更できます。このパラメーターが問題の原因であることはわかっています。エディターを変更すると、ポートレットは常にこのパラメーターをチェックして、表示するビューを決定するからです。

request.getPortletSession().setAttribute("com.ibm.faces.portlet.page.view", "/MyPage.xhtml");

私のアイデアは、各JSFナビゲーションにコールバックを追加して、ナビゲーションが表示するビュー(おそらくview-paramsを含む)にこのパラメーターを設定することでした。標準のコールバックを持つことは可能ですか?そうでない場合、このパラメータを設定するナビゲーションルールで何らかのELを実行することは可能でしょうか?

4

1 に答える 1

1

どういうわけか、各JSFナビゲーションにコールバックを追加します

カスタムでジョブを実行できますConfigurableNavigationHandler。キックオフの例は次のとおりです。

public class MyNavigationHandler extends ConfigurableNavigationHandler {

    private NavigationHandler parent;

    public MyNavigationHandler(NavigationHandler parent) {
        this.parent = parent;
    }

    @Override
    public void handleNavigation(FacesContext context, String from, String outcome) {

        // TODO: Do your job here. 

        // Keep the following line untouched. This will perform the actual navigation.
        parent.handleNavigation(context, from, outcome);        
    }

    @Override
    public NavigationCase getNavigationCase(FacesContext context, String fromAction, String outcome) {
        return (parent instanceof ConfigurableNavigationHandler)
            ? ((ConfigurableNavigationHandler) parent).getNavigationCase(context, fromAction, outcome)
            : null;
    }

    @Override
    public Map<String, Set<NavigationCase>> getNavigationCases() {
        return (parent instanceof ConfigurableNavigationHandler)
            ? ((ConfigurableNavigationHandler) parent).getNavigationCases()
            : null;
    }

}

実行するには、次のように登録しますfaces-config.xml

<application>
    <navigation-handler>com.example.MyNavigationHandler</navigation-handler>
</application>  
于 2012-06-04T14:03:31.027 に答える