0

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

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

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

在 portlet 世界中,每个 portlet 都通过存储在 PortletSession 中的参数获得它应该显示的视图,我也可以轻松更改该参数。我知道这个参数造成了麻烦,因为当编辑器发生变化时,portlet 总是会检查这个参数来决定显示哪个视图。

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

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

4

1 回答 1

1

以某种方式为每个 JSF 导航添加回调

您可以在 custom 中执行这项工作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 回答