You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-user@portals.apache.org by bhardage <bh...@harding.edu> on 2010/09/17 19:37:24 UTC

How would I make portlets with the same backing class display different information?

Hello,

This is a rather lengthy description so please bear with me.

I have a list with x number of items, and a page with x number of portlets.
Each portlet on the page has the same backing class and access to my list,
and what's shown changes depending on which list item is selected. The edit
mode allows the user to select which item to display, and I store the item
they selected in the preferences object behind the portlet.

As it stands, each portlet initially displays the first item in the list
until a user edits the portlet and selects a different item. However, I'd
like each portlet to show a different item initially.

It seems like I'll have to calculate which item to show based on position.
If I have 2 columns and 6 rows then the item in column 2 row 4 will show
item 8 ((row - 1) * #columns + column). This works well except that, when
the user starts moving the portlets around, the portlet values change with
position.

I'd like to "lock in" the item selected initially, so it doesn't change with
movement. Unfortunately, I really need to store the initial item selected
(or the initial position) in the preferences object, but I can't do that in
the doView function, and processAction isn't called until a portlet switches
states.

I thought about just storing the initial choice in the session and reading
it when the processAction function is called (giving it lower priority than
the actual submitted choice). The problem with this is that, if the session
invalidates before the user switches portlet modes, the selected item won't
be stored.

My other thought was to somehow include the portlet's position as a variable
in the portlet-preferences element of the portlet.xml file, but I don't even
know if this is possible.

I guess another option would be to use my own preferences implementation,
but I kind of see that as a last resort.

Does anyone have any ideas about how I might accomplish what I need?

Any help/suggestions are much appreciated.

Thanks,

B.J.

P.S. I'm using the Portlet 2.0 specification (though I'm not using events)
and Jetspeed 2.1.
-- 
View this message in context: http://old.nabble.com/How-would-I-make-portlets-with-the-same-backing-class-display-different-information--tp29740894p29740894.html
Sent from the Jetspeed - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-user-help@portals.apache.org


Re: How would I make portlets with the same backing class display different information?

Posted by Woonsan Ko <wo...@yahoo.com>.
Hello B.J.,

Portlet preferences can be stored even in render phase if you can use Jetspeed-2 API component, o.a.j.components.portletpreferences.PortletPreferencesProvider, in your portlet application.
Of course, this approach with Jetspeed-2 specific API could be one you want to avoid as possible.
However, if you leverage a portlet filter for this custom stuffs, then you could keep the others as pure portlets.
I mean the followings:
- Just use portlet preferences in the portlet.
- Add a portlet filter which reads and modify portlet preferences with Jetspeeed-2 specific API components if necessary.
  So, the portlet filter can do pre-processing on each render request.

In the dedicated filter, you could use the following techniques:
- PortletPreferencesProvider can be accessed in either portlet or filter via PortletContext by o.a.j.CommonPortletServices.CPS_PORTLET_PREFERENCES_PROVIDER. See [1] for details.
  Probably #retrieveUserPreferences() and #storeUserPreferences() will be useful.
- Each portlet window object can be retrieved from the renderRequest by renderRequest.getAttribute(o.a.j.PortalReservedParameters.PORTLET_WINDOW_ATTRIBUTE);
- User name can be retrieved via renderRequest.getUserPrincipal().getName().

HTH,

Woonsan

[1] http://portals.apache.org/jetspeed-2/deployguide/guide-services.html

--- On Fri, 9/17/10, bhardage <bh...@harding.edu> wrote:

> From: bhardage <bh...@harding.edu>
> Subject: How would I make portlets with the same backing class display different information?
> To: jetspeed-user@portals.apache.org
> Date: Friday, September 17, 2010, 7:37 PM
> 
> Hello,
> 
> This is a rather lengthy description so please bear with
> me.
> 
> I have a list with x number of items, and a page with x
> number of portlets.
> Each portlet on the page has the same backing class and
> access to my list,
> and what's shown changes depending on which list item is
> selected. The edit
> mode allows the user to select which item to display, and I
> store the item
> they selected in the preferences object behind the
> portlet.
> 
> As it stands, each portlet initially displays the first
> item in the list
> until a user edits the portlet and selects a different
> item. However, I'd
> like each portlet to show a different item initially.
> 
> It seems like I'll have to calculate which item to show
> based on position.
> If I have 2 columns and 6 rows then the item in column 2
> row 4 will show
> item 8 ((row - 1) * #columns + column). This works well
> except that, when
> the user starts moving the portlets around, the portlet
> values change with
> position.
> 
> I'd like to "lock in" the item selected initially, so it
> doesn't change with
> movement. Unfortunately, I really need to store the initial
> item selected
> (or the initial position) in the preferences object, but I
> can't do that in
> the doView function, and processAction isn't called until a
> portlet switches
> states.
> 
> I thought about just storing the initial choice in the
> session and reading
> it when the processAction function is called (giving it
> lower priority than
> the actual submitted choice). The problem with this is
> that, if the session
> invalidates before the user switches portlet modes, the
> selected item won't
> be stored.
> 
> My other thought was to somehow include the portlet's
> position as a variable
> in the portlet-preferences element of the portlet.xml file,
> but I don't even
> know if this is possible.
> 
> I guess another option would be to use my own preferences
> implementation,
> but I kind of see that as a last resort.
> 
> Does anyone have any ideas about how I might accomplish
> what I need?
> 
> Any help/suggestions are much appreciated.
> 
> Thanks,
> 
> B.J.
> 
> P.S. I'm using the Portlet 2.0 specification (though I'm
> not using events)
> and Jetspeed 2.1.
> -- 
> View this message in context: http://old.nabble.com/How-would-I-make-portlets-with-the-same-backing-class-display-different-information--tp29740894p29740894.html
> Sent from the Jetspeed - User mailing list archive at
> Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
> For additional commands, e-mail: jetspeed-user-help@portals.apache.org
> 
> 


      

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-user-help@portals.apache.org