Hi Aaron. Your 2nd approach is more or less what I had to do in order to trigger file downloads, can't say I'm of fan of any of these hacks though. If the J2 developers could provide a way to initiate a single portlet request that bypassed all of the decorator/template logic and output only a single portlet's content (a "raw/direct portlet request" per say) then none of this would be necessary. Of course the portlet would have to be able to set the "content type" as well. This is a big hole in the spec IMO and needs to be addressed by any portal implementation (most do) even if it's in a non-standard way, at least until the spec "catches up". :-) Seems to me that this "feature" would be extremely useful for debugging purposes as well ... just my 2 cents.
- Frank > -----Original Message----- > From: news [mailto:[EMAIL PROTECTED] Behalf Of Aaron Evans > Sent: Thursday, September 22, 2005 07:42 AM > To: [email protected] > Subject: Re: issue with popup > > > Kishore Sasidharan <kishore.sasidharan <at> cognizant.com> writes: > > > > > > > Hi > > > > I want to provide a jsp popup in one of my portlets.I referred to the > > user chooser popup but it doesnot work for my application. Also the > > popup page has a html table that is populated from the database.Can > > anyone help me with this. > > > > I looked at this posting because for some of my UI components, I > will need to > employ pop-ups. So I took a look at the "user chooser" in the security > application. Note that using portlets complicates things when > employing pop-ups > because the content displayed in the new window must still be in > the context of > a portal page (although I present another possibility below). > > I will try to break down how this mechanism works: > > Let's say, we have a "source portlet" on which we want to display > a link to > pop-up a "pop-up portlet". > > 1. Firstly, you must create a .psml page that will just display > the pop-up > portlet so you don't get a whole portal page. In the case of the > "user chooser" for group management, take a look at: > <jetspeed webapp>/WEB-INF/pages/Administrative/choosers/multiusers.psml > > It displays only the security::UserMultiChooser portlet (our > pop-up portlet). > > In a way this is somewhat unfortunate since your portlet > application now relies > on a proprietary portal resource (the .psml page) present in > another webapp > (the jetspeed webapp). Furthermore, your portlet application > needs to know > the name of this foreign resource so that a URL to it can be constructed > (see #2). However, given the current state of the portlet > specification, I > suppose you can't really complain. > > 2. So now you need to create a URL to this psml page. In the case of the > group details portlet, in it's doView method, it constructs the > URL by calling: > > SecurityUtil.getAbsoluteUrl(request, > "/Administrative/choosers/multiusers.psml"); > > This method of SecurityUtil then constructs an absolute URL like so: > > public static String getAbsoluteUrl(RenderRequest renderRequest, String > relativePath) > { > RequestContext requestContext = (RequestContext) > renderRequest.getAttribute(PortalReservedParameters.REQUEST_CONTEX > T_ATTRIBUTE); > HttpServletRequest request = requestContext.getRequest(); > StringBuffer path = new StringBuffer(); > return requestContext.getResponse().encodeURL( > path.append(request.getScheme()) > .append("://") > .append(request.getServerName()) > .append(":") > .append(request.getServerPort()) > .append(request.getContextPath()) > .append(request.getServletPath()) > .append(relativePath).toString() > ); > } > > 3. The URL is saved in the request context and output on in the portlet's > display template (in this case > security/WEB-INF/security/groups/group-details.vm). A button to > trigger the > pop-up is output... > > <input onclick="javascript:openWindow('$userChooser')" type="submit" > name="group.action" value="Add Users to Group..." > class="portlet-form-button" /> > > ...invoking the javascript... > > function openWindow(pipeline) > { > var vWinUsers = window.open(pipeline, 'UserPicker', > 'status=no,resizable=yes,width=200,height=300,scrollbars=yes'); > vWinUsers.opener = self; > vWinUsers.focus(); > } > > 4. And voila, clicking on the button opens a pop-up window with our pop-up > portlet. > > Now in this particular case (and in mine as well), we select some > items from > a form in the pop-up portlet in order to populate some data in our source > portlet. > > At this point, the mechanics are the same as with any pop-up UI. You use > javascript on form submittal (of the pop-up portlet) to: > -capture the pop-up portlet form values and set some hidden field on the > parent window, in the correct source portlet form > -submit the source portlet form > -close the pop-up window. > > Take a look at security/WEB-INF/security/users/user-multi-chooser.vm. > > Note that no action is called in the pop-up portlet when the form > is submitted, > although you could if you wanted if it were a multi-step process > or whatever. > > > Another Approach: > A second approach would be to pop-up a URL to a servlet/JSP > contained in your > portlet application directly (by-passing the portlet), rather > than a psml page. > > This has the advantage that you do not need to rely on a psml page in the > jetspeed application. However, it has the following > disadvantages/challenges: > > 1. Your portlet application now deviates from a true portlet by calling > servlet resources outside of the portal. > > 2. You would need SSO enabled at the container level in all but > the simplest > cases (you wouldn't if it was a publicly available portlet and you could > pass in whatever data params you needed in the URL). > > This approach may seem like somewhat of a kludge and I am not saying it is > better by any means. However, it should be noted that this is > *exactly* the > approach that is needed in order to trigger a download of a > binary file from > a portlet. > > Comments welcome. I hope this is useful to developers out there > looking to > use pop-ups in their portlet UIs. > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
