如何在具有to-view-id的portlet环境中的JSF Navigation-Rule之后设置Session-Parameter

时间:2012-06-04 07:16:12

标签: jsf-2 portlet portal

我们目前在使用JSF2的portlet环境中面临一个问题。

应用程序正在为实际用户会话创建动态门户页面...将其视为Eclipse编辑器视图,用户可以在其中编辑实体。所以现在我打电话给动态视图编辑: - )

我们现在面临的问题是:用户导航到编辑器并处理portlet。每个portlet中显示的视图当然会随时间而变化。现在他想看看另一个在另一个编辑器中显示的实体。 但是当他导航回第一个编辑器时,portlet的状态会变回默认视图。

在portlet-world中,每个portlet每个portlet获取它应该通过存储在PortletSession中的参数显示的视图,我也可以轻松地更改该参数。我知道这个参数引起了麻烦,因为当更改编辑器时,portlet将始终检查此参数以决定显示哪个视图。

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

我的想法是,以某种方式为每个JSF导航添加一个回调,它将把这个参数设置为导航将要显示的视图(可能包括view-params)。 是否可以进行标准回调?如果没有,是否可以在将设置此参数的导航规则中执行某种EL?

1 个答案:

答案 0 :(得分: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>