Friday, 17 October 2014

Exploring NavigationSelectionModel websphere portal8

NavigationSelectionModel :-
                                                 Gives information about currently selected node. Using this we can generate breadcrumbs. Using this at any point in any portlet we can get currently selected node.

Please include this JSP in portlet or theme{If theme remove unnecessary imports} :-


<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" import="java.util.*,javax.portlet.*,com.ibm.modelspiportlet.*" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>        
<%@taglib uri="http://www.ibm.com/xmlns/prod/websphere/portal/v6.1/portlet-client-model" prefix="portlet-client-model" %>   
<%@ page import="com.ibm.portal.model.NavigationSelectionModelHome" %>
<%@ page import="com.ibm.portal.model.NavigationSelectionModelProvider" %>
<%@ page import="com.ibm.portal.navigation.NavigationSelectionModel" %>
<%@ page import="com.ibm.portal.navigation.NavigationNode" %>
<%@ page import="com.ibm.portal.ModelException" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.NamingException" %>     
<portlet:defineObjects/>
<portlet-client-model:init>
      <portlet-client-model:require module="ibm.portal.xml.*"/>
      <portlet-client-model:require module="ibm.portal.portlet.*"/>   
</portlet-client-model:init> 


<%
try{
    Context ctx = new InitialContext();
    NavigationSelectionModelHome home = (NavigationSelectionModelHome) 
        ctx.lookup("portal:service/model/NavigationSelectionModel");
    if (home != null) {
        NavigationSelectionModelProvider provider = 
            home.getNavigationSelectionModelProvider();
        NavigationSelectionModel model = 
            provider.getNavigationSelectionModel(request, response);
        for (java.util.Iterator i = model.iterator(); i.hasNext(); ) 
        {
            NavigationNode node = (NavigationNode) i.next();
            String title = node.getTitle(Locale.ENGLISH);
            if (i.hasNext()) {
%>
        <a href="<portal-navigation:navigationUrl type='link' varname='<%=node%>'/>">
            <portal-fmt:title varname='<%=node%>'/>
            <%=title%>
        </a> 
        &gt;
<%
            }
            else 
            {
%>
        <portal-fmt:title varname='<%=node%>'/>
         <%=title%>
<%
            }
        }
    }
}
catch (ModelException mx) {
%>

<p><span style="color:#ff0000">A model exception occured</span></p>

<%
}
catch (NamingException nx) {
%>

<p><span style="color:#ff0000">A naming exception occured</span></p>

<%
}

%>

Final output :- By default portal has breadcrumbs. If you need them in portlet then use above logic



If you want to use in portlet controller use below code :- 

 public static ObjectID getCurrentPage(PortletRequest request, 
                     PortletResponse response) throws StateException, NamingException, IOException { 
             ObjectID oId = null
             try { 
                     NavigationSelectionModelProvider provider = getNavigationSelectionModelProvider();         
                     
                     NavigationSelectionModel model = provider.getNavigationSelectionModel(request, response); 
                     NavigationNode node = (NavigationNode)model.getSelectedNode(); 
                     oId = node.getObjectID(); 
             } catch (ModelException e) { 
                     System.err.println("The current page could not be located = " + e); 
             } 
             
             return oId; 
     } 

     protected static NavigationSelectionModelProvider getNavigationSelectionModelProvider() { 
             NavigationSelectionModelProvider provider = null
             try { 
                     if(navSelHome == null) { 
                             Context ctx = new InitialContext(); 
                             navSelHome = (PortletServiceHome)ctx.lookup("portletservice/com.ibm.portal.portlet.service.model.NavigationSelectionModelProvider");                         
                     } 
                     provider =(NavigationSelectionModelProvider) navSelHome.getPortletService(NavigationSelectionModelProvider.class); 
             } catch (Exception e) { 
                     System.err.println("There was an error getting the navigation selection model provider = " + e); 
             }                 
             
             return provider; 
     } 

No comments:

Post a Comment

Custom single threaded java server

 package com.diffengine.csv; import java.io.*; import java.net.*; import java.util.Date; public class Server { public static void main(Str...