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