Souravm, there is actually no easy answer to this. This was a huge discussion item in the JSR-301 Expert Group as well, and we had to punt on it. Let me start off by stating cannon from the most current JSR-301 specification...

By default a bridge DOES NOT preserve parameters from an action request to a render request. The reasons for this are many, not the least of which involves some oddities with how PPR might work. The main issue is that once set, render parameters remain until the next REAL render request. The JSR-301 Bridge DOES have a setting which would force the bridge to save these render parameters, but this is mostly considered to be a temporary *compatibility mode* setting.

The reason your running into this is that the bridge expects the first call into it to be a render request. In this case, the parameters DO make it into the render request just fine.. I would be reluctant to change the default actions of the MyFaces 1.1 bridge, especially when they agree with how JSR-301 currently does things in this regard.

So my question is this, does JBoss portal allow you to create a render url?

If you want me to, I can also take this up in the next JSR-301 meeting next week and see if people think it's a usecase we need to support.

Scott


souravm wrote:
Yes. As I don't think there is any other option available. And I wanted to 
validate my understanding regarding that in this thread.

Here is the problem situation -

1. I cannot execute the normal JSF lifecycle.execute() as for that the 
ActionRequest needs to have MyFacesGenericPortlet.VIEW_ID populated as one of 
the request parameters with the target view jsp/xhtml.
2. So I need to directly go to doView(). At this point the request and response 
in facesConfig is changed to RenderRequest and RenderResponse. The 
RenderRequest doesn't content the original request parameters which were in the 
ActionRequest, unless those parameters are explicitly populated using 
request.setRenderParameters().
3. The renderView() will in turn call the facesRender() and which will in turn 
call the nonFacesRequest() (as the VIEW_ID is null)
4. The nonFacesRequest() method will first set the default view as the view and 
will eventually call the lifecycle.render()
5.  The lifecycle.render() will initiate the bean referred in the default view 
page but it cannot populate the bean attributes with the original request 
parameters as those parameters are not available in RenderRequest (unless 
explicitly populated as methioned in step 2).

So as a solution I thought -

1. In processAction() we can populate all request parameters of ActionRequest 
in RenderRequest using request.setRenderParameters().
2. In the constructor of the bean (which is called in step 5 mentioned above) 
access them from RenderRequest and populate the bean attributes.

I've also thought of another approach where I can create the target bean in 
processAction() using the request parameters in ActionRequest and keep the bean 
in session. However, this solution will not be generic as one can not access 
the target bean names in generic way at processAction() method.

Any other viewpoint/suggestion in this regard would be highly appreciated.

Regards,
Sourav



________________________________________
From: Scott O'Bryan [EMAIL PROTECTED]
Sent: Friday, April 18, 2008 5:45 AM
To: MyFaces Discussion
Subject: Re: Calling a Myfaces Portlet from a non-JSF request ..

Ahh, I see.  So you're trying to reference the  action parameters from
the Render?

Scott

souravm wrote:
Hi Scott,

We are doing exactly what you mentioned in the 3rd paragraph of your mail.

Whatexactly happening in MyFacesGenericPortlet is -

a) The Request is passed to the nonFacesRequestMethod
b) It executes the lifecycle.render method (so other lifecycle phases are 
skipped)

Due to this the request parameters are never available in the RenderRequest.

I think this is a design bug of MyFacesGenericPortlet. It handles the non faces 
request but does not handle the request parameters properly.

Regards,
Sourav



-----Original Message-----
From: Scott O'Bryan [mailto:[EMAIL PROTECTED]
Sent: Thursday, April 17, 2008 10:52 AM
To: MyFaces Discussion
Subject: Re: Calling a Myfaces Portlet from a non-JSF request ..

Yeah, JSR-301 is really the first spec to consider JSF and Portlet in
detail.  It, of course, is dependent on JSF 1.2 (for a bunch of
reasons).  Still, this is not really a JSF issue I don't think (unless
the 1.1 MyFaces bridge has a bug somewhere, but I'm skeptical).

I'm not familiar with JBoss Portal's header framework, but I can only
assume that it's a way to put a portlet somewhere in the portal's header
rather then in the main content region.  The issue here is that any
ActionUrl you create will reference the header instance unless they also
provide you some mechanism for a specific portlet instance.

If they do have the latter mechanism, you basically need to either
"post" to the portlet you want to reflect your results (meaning it
needs to be on the current page already, or you will have to create a
new ActionUrl which references your portlet instance, append your
parameters to that which you need the portlet to recieve, and then do a
redirect with that URL.  Does this make sense?

Scott

souravm wrote:

Thanks Scott for your suggestion.

I know I'm struggling to find a solution which involves 2 specs JSF and Portlet 
(most probably the 2 most complicated one today in J2EE world).

Let me explain you a bit on the origin of this requirements.

The Portal application we are developing needs to have a search box in header. 
That Search box needs to appear in every page at the top right corner where 
user will enter a search criterion. And the result of the search needs to be 
displayed in the main content window of the Portal

Now creating this Search Box using a Portlet does not make sense as that will 
make the portal layout very complicated. So we use the Jboss Portal's header 
framework to create this search box. And as a submission of the search request 
we try to initiate a portlet.

So that's being the case -

1. The JSF Portlet being still called within the Portal Framework with encoded 
URL.
2. The request is still a Post request (form submit happens from the Search Box 
form).

Considering this situation any further suggestion is really appreciated.

Regards,
Sourav

-----Original Message-----
From: Scott O'Bryan [mailto:[EMAIL PROTECTED]
Sent: Thursday, April 17, 2008 8:48 AM
To: MyFaces Discussion
Subject: Re: Calling a Myfaces Portlet from a non-JSF request ..

One more thing, this has nothing to do with JSF. It's has to do with
trying to call a portlet from outside of a Portal. :) It is possible the
JBOSS portal has an off-spec proprietary way to pass parameters into a
portlet, but you'll have to take it up with them.

souravm wrote:


Hi All,

I've a MyFaces (1.1.4) Portlet deployed in jboss portal server.

First time I need to access this portlet from a non-JSF (jsp) page
which sends a http post request with some request parameters.

The solution does not work when the request does not have any request
parameter (works fine when accessed by a request with no request
parameter).

When I try to read the request parameter(s) in the constructor of the
managed bean they come as null.

I tried extending the processAction() method of MyFacesGenericPortlet.
I read the request parameters from the ActionRequest and set them in
RenderRequest using setRenderParameter (This anyway one has to do for
a jsp based portlet implementation). With this approach I can read the
request parameters in the constructor of the managed bean.

I would like to validate whether this is a known limitation of
MyFacesGenericPortlet and the solution approach mentioned above is
right one (or any other approach is recommended) ?

Any help in this regard would be highly appreciated.

Sourav

**************** CAUTION - Disclaimer *****************
This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended
solely for the use of the addressee(s). If you are not the intended
recipient, please notify the sender by e-mail and delete the original
message. Further, you are not to copy, disclose, or distribute this
e-mail or its contents to any other person and any such actions are
unlawful. This e-mail may contain viruses. Infosys has taken every
reasonable precaution to minimize this risk, but is not liable for any
damage you may sustain as a result of any virus in this e-mail. You
should carry out your own virus checks before opening the e-mail or
attachment. Infosys reserves the right to monitor and review the
content of all messages sent to or from this e-mail address. Messages
sent to or from this e-mail address may be stored on the Infosys
e-mail system.
***INFOSYS******** End of Disclaimer ********INFOSYS***





Reply via email to