2013-05-31 2 views
1

В нашем проекте мы меняем версию JSR (от 168 до 286) проектов портлетов. Все портлеты - - портлеты и версия jsf - jsf1.2. У нас есть несколько модулей, но структура почти такая же. Их портлеты в левой стороне, они действуют как левая навигация для пользователей. С правой стороны у нас есть основные портлеты, в которых размещаются различные функции приложения. IPC используется для отправки этих выбранных значений из левого портлета в правый портлет и, соответственно, для портлета справа отображается представление.Faces Portlet Navigation - WebSphere Portal - JSR 286

В способе processEvent портлетов представление целевого портлета задано на основе полученных значений. Пример 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). Затем снова , если выбор сделан из левого портлета, вид правого портлета остается тем же и не обновляется, хотя IPC происходит правильно. Пожалуйста, дайте мне знать, если требуются какие-либо другие детали. Заранее спасибо.

ответ

0

Вам необходимо сбросить представление портлета Target с помощью NavigationHandler. Используйте что-то вроде следующего кода. Где 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> 
+0

zarfarf - Спасибо за ответ. Я понял подход, которым вы поделились. Но проблема в том, что у нас нет фиксированной целевой страницы (например, /TargetPortletView.jsp), поэтому «to-view-id» будет отличаться от одного сценария к другому. Таким образом, нам нужен механизм для динамического определения идентификатора целевого представления из метода processEvent на основе входных данных, которые мы получаем через IPC. –

Смежные вопросы