Managing Portlets programatically

2004-09-07 Thread Oscar Ruiz

Hi all,

I'd like to know if there is a way of fully controlling Portlets
programatically; minimize, maximize, remove, add, ...

I've got a set of portlets and would like to show or hide some depending on
the state of the request process.

So far the only solution I found is to set an empty template to those i do
not to show, but still they take the place, although empty, in the resulting
HTML page as empty box.

Many thanks.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: Portlets execution flow

2004-09-06 Thread Oscar Ruiz
Hi all,
guess you are talking about velocity templates here.

But, how can i do the same with a JSP template?, I cannot get the event
executed before any buildNormalContext of any portlet.

The following does not work:


 
 
 

Thanks.


From: Bob Fleischman <[EMAIL PROTECTED]>
Subject: Portlets execution flow
Date: Mon, 16 Aug 2004 00:17:56 -0400
Content-Type: text/plain;
charset="utf-8"

Ahh!! You've discovered one of the 'gotchas' of direct action calls.

When you call an action directly with $jslink.getAction("myaction",
$portlet) the context does not yet contain the portlet and so you can not
use it for getUser or any other Portlet specific call to save state. You
can, however, still impact services, or database connectivity. This approach
will fire the action BEFORE anything else, which seems to be its major
appeal.

I have found it much easier to use a form action of
$jslink.getPortletById($portlet.getID()) with a button name of
"eventSubmit_doUpdate" and then I send other parameters via hidden fields on
the form.

That way I am certain the correct instance of the correct portlet is being
referenced.

Bob

-Original Message-
From: Bjorn Vidar Remme [mailto:[EMAIL PROTECTED]
Sent: Tuesday, August 10, 2004 4:18 AM
To: Jetspeed Users List
Subject: RE: Portlets execution flow


Correction* 

The action event does call the public void doBrowse_refresh(RunData, 
Context) method. 
There was a Null pointer Exeption thrown in there when it tried to fetch 
and use the portlet object in the Context .
 Apparently this exception caused the rundata only method to be called.


Med vennlig hilsen/Kind regards,

Bjorn Vidar Remme
Application Engineer






Bjorn Vidar Remme
09.08.2004 20:52

To: "Jetspeed Users List" <[EMAIL PROTECTED]>
cc: 
Subject:RE: Portlets execution flow

Hi Bob, 

What you are saying makes sense. The trouble was that I was using 
qualified action names, but I still had major problems. I then reluctantly 
came to the conclusion that there was something fundamentally wrong with 
my code. 

Looking over the code again I remember changing the form method from POST 
to GET because my action event would not fire if I used POST. A major 
mistake! Changing the method caused the action parameter in the URL to be 
ignored. And the code executed as if I where using $jslink alone. 

It took me a while to figure out what was going on. Overriding the 
executeEvents() methods and logging any Exceptions thrown gave me the 
answer. When I supply an action in the URL it looks for an event method 
with the signature 'public void doBrowse_X(RunData rundata)' and not 
'public void doBrowse_refresh(RunData, Context)'.

No wonder my event was not triggered because I used the Context variation.

I then changed my code and it worked just as you said. Brilliant!

The only consequence of removing the Context as a parameter is that we 
must find an alternative way to get the portlet id. Probably submitting it 
as a parameter.


Thanks, you really saved the day!!!


Kind regards,
Bjorn Vidar Remme







"Bob Fleischman" <[EMAIL PROTECTED]>
06.08.2004 18:18
Please respond to "Jetspeed Users List"
 
To: "'Jetspeed Users List'" <[EMAIL PROTECTED]>
cc: 
Subject:RE: Portlets execution flow


Bjorn:

You can limit the impact of which class runs your method via the action by
qualifying the action.

That is: use action=Myportlet2.doUpdate rather than action=doUpdate.  With
the second method any portlet which has a doUpdate method will fire.

As to having several Portlets share a current model. We have found that it
is best to have a separate action class that modifies the model. Then 
using
the setAction style described in this thread you can update the common 
model
first. That action will be called before any rendering.

Your portlet should then be limited to building up your context. Otherwise
you are duplicating your efforts by putting model update code in 2 places.

Bob

-Original Message-
From: Bjorn Vidar Remme [mailto:[EMAIL PROTECTED] 
Sent: Friday, August 06, 2004 10:41 AM
To: Jetspeed Users List
Subject: Re: Portlets execution flow

Hi all, 

Well the trouble by using setAction() is that the action is executed for 
all the portlets (if a suitable method exists). You can easily test this 
by adding multiple instances of the same portlet to a page (same action 
class) or multiple portlets with different action classes but the same 
event name. You will then see that the action event is executed once for 
all the portlets.

The pattern is thus (AE=action event, BNC=buildNormalContext):
AE for portlet A, BNC for portlet A, AE for portlet B, BNC for portlet B 
etc..

Not what we want at all, we just want the action event to fire once.
This is why I specify the portlet ID in the action like this: 
$jslink.getAction("myaction", $portlet)

The action event is then executed only once, but as I described in my 
previous post

Portlets execution flow

2004-08-05 Thread Oscar Ruiz
Hi all,

can anyone clarify me how multiple MVC portlets (JSP for instance) are
executed and output displayed?

There is obviously an order in which portlet controllers are called,
apparently from top to bottom and left to right.

*apparently* the View component (JSP) is executed right after the
Controller, hence if portlets are sharing a Model the whole thing results in
a disaster.

Is there a way of rendering the page (i.e. execute the View components)
after all controllers have completed?

Many thanks.

Oscar.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: Form accessing a JSP Action

2004-05-05 Thread Oscar Ruiz
Apparently this solution may work, but found that my hello.jsp which should
invoke the method
doUpdate in MyJSPAction does not work, well doUpdate() is invoked but
buildNormalContext() as well getting into an infinite loop. In fact,
doUpdate is invoked even if i do not call it myself from a JSP.

If I change doUpdate to any other name it does not even get invoked.

Is doUpdate a method in JspPortletAction?
Cannot i use any other method name and invoke it from a JSP template?

Many thanks.

-Mensaje original-
De: Oscar Ruiz [mailto:[EMAIL PROTECTED] 
Enviado el: martes, 04 de mayo de 2004 17:57
Para: 'Jetspeed Users List'
Asunto: RE: Form accessing a JSP Action

Many thanks, i'll test that.

-Mensaje original-
De: Raphaël Luta [mailto:[EMAIL PROTECTED] Enviado el: martes, 04 de mayo
de 2004 17:36
Para: Jetspeed Users List
Asunto: Re: Form accessing a JSP Action


Le 4 mai 04, à 13:12, Oscar Ruiz a écrit :

> Hi all,
>
> I've got a problem while calling a JSP action from a JSP template.
>
> I've got a JSP Portlet identified by:
>   Action: portlet.MyJSPAction
>   Template: test.jsp
>
> Another JSP Porlet identified by:
>   Action: none
>   Template: hello.jsp
>
> In fact what I want to do (do not know if possible) is execute 
> hello.jsp,
> from there invoke MyJSPAction and return test.jsp as a result of the
> invocation.
>
> That's to complete a JSP flow.
>
>
> View  Controller
>
> Hello.jsp ->
>MyJSPAction
> Test.jsp  <-
>
> Is that possible?, shall I use the same JSP with different action 
> method
> calls?
>

You should probably only define 1 portlet:

Name: MyJSPPortlet
Action: portlets.MyJSpAction
Template: hello.jsp
ResultTemplate: test.jsp

In your Action processing code, set manually the template you want to 
display
based on your portlet state using setTemplate(). Jetspeed does not 
automate
anything in flow processing so your controller code needs to 
explicitely set the
next template to use based on its current state.

--
Raphaël Luta - [EMAIL PROTECTED]
Apache Jetspeed - Enterprise Portal in Java
http://portals.apache.org/


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




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: Form accessing a JSP Action

2004-05-04 Thread Oscar Ruiz
Many thanks, i'll test that.

-Mensaje original-
De: Raphaël Luta [mailto:[EMAIL PROTECTED] 
Enviado el: martes, 04 de mayo de 2004 17:36
Para: Jetspeed Users List
Asunto: Re: Form accessing a JSP Action


Le 4 mai 04, à 13:12, Oscar Ruiz a écrit :

> Hi all,
>
> I've got a problem while calling a JSP action from a JSP template.
>
> I've got a JSP Portlet identified by:
>   Action: portlet.MyJSPAction
>   Template: test.jsp
>
> Another JSP Porlet identified by:
>   Action: none
>   Template: hello.jsp
>
> In fact what I want to do (do not know if possible) is execute 
> hello.jsp,
> from there invoke MyJSPAction and return test.jsp as a result of the
> invocation.
>
> That's to complete a JSP flow.
>
>
> View  Controller
>
> Hello.jsp ->
>MyJSPAction
> Test.jsp  <-
>
> Is that possible?, shall I use the same JSP with different action 
> method
> calls?
>

You should probably only define 1 portlet:

Name: MyJSPPortlet
Action: portlets.MyJSpAction
Template: hello.jsp
ResultTemplate: test.jsp

In your Action processing code, set manually the template you want to 
display
based on your portlet state using setTemplate(). Jetspeed does not 
automate
anything in flow processing so your controller code needs to 
explicitely set the
next template to use based on its current state.

--
Raphaël Luta - [EMAIL PROTECTED]
Apache Jetspeed - Enterprise Portal in Java
http://portals.apache.org/


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



Form accessing a JSP Action

2004-05-04 Thread Oscar Ruiz
Hi all,

I've got a problem while calling a JSP action from a JSP template.

I've got a JSP Portlet identified by:
Action: portlet.MyJSPAction
Template: test.jsp

Another JSP Porlet identified by:
Action: none
Template: hello.jsp

>From hello.jsp I want to call the action portlet.MyJSPAction as follows:







But I do not think it worked because I get the hello.jsp back again.

I can access content generated by MyJSPAction from test.jsp, but not from
hello.jsp.

In fact what I want to do (do not know if possible) is execute hello.jsp,
from there invoke MyJSPAction and return test.jsp as a result of the
invocation.

That's to complete a JSP flow.


ViewController

Hello.jsp -> 
 MyJSPAction
Test.jsp  <-

Is that possible?, shall I use the same JSP with different action method
calls?

Thanks.



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]