1
votes

I'm trying to deploy a portlet in IBM WebSphere Portal 6.1, that features a MultiBox (an extended version of a Lightbox, which not only allows to display pictures, but also other kind of components, in my case an HTML feedback form).

I'm using multiBox - for MooTools 1.2, as featured in http://www.liamsmart.co.uk/Downloads/multiBox/

When i extract the downloaded zip file to my machine, it works fine, because it's pure HTML; but when I include all files in a Portlet Project (I use RAD 8.0 to create a JSR-286 compliant basic portlet, using Java 1.5 and runtime targeted as WebSphere Portal 7.0 stub, all of this following the New Portlet Project wizard)

I have been searching for info regarding this kind of deployment all this week, but I haven't found anything. Does anyone know where could I find the help I need?

Thanks in advance.

1
Are you sure that this application is portlet compatible?Udo Held
@udo-held It seems to be portlet compatible, according to what one of my work partners told me, someone at my company has done some development using multibox and IBM WebSphere Portal portlets. I'm trying to contact that person to get all the info I need; when I get it, I'll share it with the Stack Overflow community. Thank you.Francisco Alvarado

1 Answers

0
votes

OK, I finally was able to ask to the person who had worked on this kind of thing before and he gave me some guidelines in order to get my development done.

What I ended by doing is the following:

First, I did this in the doView method of the portlet (in this example, /Feedback/src/com/ibm/feedback/FeedbackPortlet.java):

public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
    response.setContentType(request.getResponseContentType());

    String targetJsp = "/_Feedback/jsp/html/FeedbackPortletView.jsp";
    String nextTask = request.getParameter("nextTask");
    if ("verFormulario".equalsIgnoreCase(nextTask)) {
        targetJsp = "/_Feedback/multibox/files/feedbackform.jsp";
    }

    PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(targetJsp);
    rd.include(request, response);
}

Then, in the JSP for the Portlet view (in this example /Feedback/WebContent/_Feedback/jsp/html/FeedbackPortletView.jsp), goes the following:

<%@page session="false" contentType="text/html" pageEncoding="ISO-8859-1" import="java.util.*,javax.portlet.*,com.ibm.feedback.*"%>
<%@page import="com.ibm.wps.l2.urlspihelper.portletrequest.PortletURLHelper"%>
<%@page import="javax.portlet.PortletURL"%>
<%@page import="javax.servlet.jsp.jstl.core.LoopTagStatus"%>
<%@page import="java.util.HashMap"%>
<%@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"%>

<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> 
<head> 

<%
    PortletURL url = renderResponse.createRenderURL();
    url.setParameter("keepSession", "true");
    url.setParameter("saveMap", "true");

    StringBuffer sb = new StringBuffer();

    HashMap params = new HashMap();
    params.put("nextTask", new String[] { "verFormulario" });
%>

<!-- Copy code below -->
<link type="text/css" rel="stylesheet" href="<%=renderResponse.encodeURL(renderRequest.getContextPath())%>/_Feedback/multibox/css/multibox.css"/> 

<script type="text/javascript" src="<%=renderResponse.encodeURL(renderRequest.getContextPath())%>/_Feedback/multibox/js/mootools-1.2.4-core-yc.js"></script> 
<script type="text/javascript" src="<%=renderResponse.encodeURL(renderRequest.getContextPath())%>/_Feedback/multibox/js/mootools-1.2.4.4-more-yc.js"></script> 
<script type="text/javascript" src="<%=renderResponse.encodeURL(renderRequest.getContextPath())%>/_Feedback/multibox/js/overlay.js"></script> 
<script type="text/javascript" src="<%=renderResponse.encodeURL(renderRequest.getContextPath())%>/_Feedback/multibox/js/multibox.js"></script> 
<script type="text/javascript">
    window.addEvent('domready', function(){
        //call multiBox
        var initMultiBox = new multiBox({
            mbClass: '.mb',//class you need to add links that you want to trigger multiBox with (remember and update CSS files)
            container: $(document.body),//where to inject multiBox
            descClassName: 'multiBoxDesc',//the class name of the description divs
            path: './_Feedback/multibox/files/',//path to mp3 and flv players
            useOverlay: true,//use a semi-transparent background. default: false;
            maxSize: {w:600, h:400},//max dimensions (width,height) - set to null to disable resizing
            addDownload: false,//do you want the files to be downloadable?
            pathToDownloadScript: './_Feedback/multibox/js/forceDownload.asp',//if above is true, specify path to download script (classicASP and ASP.NET versions included)
            addRollover: true,//add rollover fade to each multibox link
            addOverlayIcon: true,//adds overlay icons to images within multibox links
            addChain: true,//cycle through all images fading them out then in
            recalcTop: true,//subtract the height of controls panel from top position
            addTips: true,//adds MooTools built in 'Tips' class to each element (see: http://mootools.net/docs/Plugins/Tips)
            autoOpen: 0//to auto open a multiBox element on page load change to (1, 2, or 3 etc)
        });
    });
</script>
<!-- Copy code above -->

<!-- Styles -->
<style type="text/css">
    body{
        font-family:Arial;
    }
</style>
<!-- Styles -->
</head>
<body style="width:800px; margin:30px auto 0 auto; color:#555;">
<div style="clear:both; height:0; line-height:0; overflow:hidden"></div>

<%
    String strURL = PortletURLHelper.generateSinglePortletRenderURL(params, null, null, renderRequest, renderResponse);
%>
<a href='<%=strURL%>' id="mb11" class="mb" title="This is shown when hover the link and as a title for multibox dialog" rel="width:600,height:400">This is the link which opens multibox dialog</a>
<div class="multiBoxDesc mb11 mbHidden">This is shown as description (subtitle) for multibox dialog</div>
</body>

Notes:

  1. /Feedback/WebContent/_Feedback/multibox/files/feedbackform.jsp is just the JSP based on multibox bundled HTML page (blank.htm file), that is going to be shown inside the multibox dialog.
  2. This uses the library attached in the article Portal 6.1 and 7.0 Advanced URL Generation Helper classes (thanks to @udo-held for the link).
  3. Contents of multibox zip file were extracted to /Feedback/WebContent/_Feedback, keeping file structure.