面向Portlet导航 - WebSphere Portal - JSR 286

时间:2013-05-31 08:34:33

标签: jsf websphere jsf-1.2 websphere-portal jsr286

在我们的项目中,我们正在更改portlet项目的JSR版本(从168到286)。所有portlet都是 faces portlet ,使用的jsf版本是 jsf1.2 。我们有几个模块,但结构几乎相同。它们是左侧的portlet,它们充当用户的左侧导航。在右侧,我们有主要的portlet,它们具有各种应用程序功能。 IPC用于将这些选定值从左侧portlet发送到右侧portlet ,因此为右侧的portlet设置了视图。

在portlet的processEvent方法中,根据接收的值设置目标portlet的视图。示例processEvent方法如下:

public void processEvent(EventRequest request, EventResponse response) throws PortletException, java.io.IOException 
    {   
        super.processEvent(request, response);
        Event sampleEvent = request.getEvent();
        if(sampleEvent.getName().toString().equals("ProcessEvent")) {
            Object sampleProcessObject = sampleEvent.getValue();
            System.out.println("Message Received : " + sampleProcessObject.toString());
            TargetPortletView obj = (TargetPortletView) request.getPortletSession().getAttribute("pc_TargetPortletView"); // Managed Bean associated with the target Page
            obj.setMessage(sampleProcessObject.toString());
            request.getPortletSession().setAttribute("com.ibm.faces.portlet.page.view","/TargetPortletView.jsp");//Target JSP is set
        }
    }

但是如果某些面孔导航发生在目标jsp中并且视图被重定向到不同的jsp(例如A.jsp-> B.jsp-> C.jsp)。然后再次如果从左侧portlet完成选择,则右侧portlet的视图保持不变,并且在IPC正常发生时不会更新。如果需要任何其他详细信息,请告诉我。提前谢谢。

2 个答案:

答案 0 :(得分:1)

Rational Application Developer v9.0帮助包含一个条目 Navigating to a different page in JSF portlet解释了类似的情况。

答案 1 :(得分:0)

您需要使用NavigationHandler重置Target portlet的视图。使用类似下面的代码。在 xxxxxxxxxx 的位置,将其替换为您已定义为面部结果的字符串,该结果将映射到您要加载的面部页面(请参阅下面的导航规则 - 根据需要进行更改)

 // Reset view
FacesContext facesContex = FacesContext.getCurrentInstance();
NavigationHandler nav = facesContext.getApplication().getNavigationHandler(); nav.handleNavigation(facesContext, null, **xxxxxxxxxxx**);
                    facesContext.renderResponse();
                    super.saveViewState(facesContext);

                    facesContext.release();

-----------
in faces-config:

    <navigation-rule> 
        <from-view-id>/pages/*</from-view-id> 
        <navigation-case> 
          <from-outcome>reset</from-outcome> 
          <to-view-id>/TargetPortletView.jsp</to-view-id> 
        </navigation-case> 
     </navigation-rule>