1

在我们的项目中,我们正在更改 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 正确发生。如果需要任何其他详细信息,请告诉我。提前致谢。

4

2 回答 2

1

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

于 2013-07-31T21:05:23.643 回答
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> 
于 2013-06-03T10:27:11.590 回答