Hi,

I'm one of those portlet users. I could only make some suggestions and
outline what has worked so far me. Then, committers could decide what
and how to incorporate in the code. Subsequently, I could test releases
of MyFaces that don't need workarounds. Here are a few things:

1) I reported a problem yesterday on initialization of the
SerialFactory. This is actually more general than portlets. It turns out
state serialization is initialized in a listener declared in the MyFaces
TLD. I'm not 100% sure about this, but it seems that this works because
of a side effect of the way servlet containers work: usually they are
also JSP containers and scan JARs for tag libraries etc. However, an
application that does not use JSPs or that (as was my case) deploys
myfaces as a shared, server-wide library, breaks those assumptions and
the startup listener declared in the TLD is not called. MyFaces
initialization should probably be exposed as a well-documented API and
it should all be in one place. 

2) The main problem with portlets is the use of extended components
(file upload, and components that require client-side libraries). File
upload works with a servlet filter in standalone applications. But
servlet filters don't work on portals. In a portal environment,
multipart processing can be placed in a "generic portlet" base class.
This is not done in MyFacesGenericPortlet, so I created my own by
copying over source code. As for JavaScript stuff, this will depend on
portlet containers. I think all of them have some means to plug in
common client-side resources. In WebSphere for example, one writes
themes and skins as JSP pages so it's easy to manage client-side code
sort of manually. My suggestion would be to expose this in MyFaces as a
well-documented API. The portlet spec will evolve at some point to
handle this requirement in a standard way. Currently, I'm not using any
of the components that require a JS library because I don't know how
much time I would loose to make it work. Source code in MyFaces is not
easy to navigate, it's not downloable, you have this "shared" thing with
package names that change during build time etc., so I'm reluctant to
dig into it to much.

For file upload, the solution is pretty simple. Here is how it works for
me:

a) I'm using commons-fileupload
B) in the processAction portlet method of MyFacesGenericPortlet, I have:

    public void processAction(ActionRequest request, ActionResponse
response)
            throws PortletException, IOException
    {
        if (log.isTraceEnabled()) log.trace("called processAction");

        if (sessionTimedOut(request)) return;

        setPortletRequestFlag(request);
        
        if (PortletFileUpload.isMultipartContent(request))
                request = new MultipartActionRequestWrapper(request);
        
        FacesContext facesContext = facesContext(request, response);
        
// etc...

MultipartActionRequestWrapper is a simple wrapper class I wrote for an
ActionRequest that does the multipart processing based on
commons-fileupload facilities. The rest of the code is the same, relying
on the ActionRequest interface.

I remember or encounter other glitches, I'll post them.

Best,
Bolerio

-----Original Message-----
From: Mike Kienenberger [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, September 13, 2006 12:22 PM
To: MyFaces User mailing list
Subject: Portlet examples needed by portlet/MyFaces users

We've had a number of bugs posted by users of MyFaces who are also
using Portlets.

Would one of those users like to contribute some MyFaces portlet
examples to aid us in fixing and debugging your issues?   I don't
think any of the currently-active MyFaces committers are using
portlets, so it's hard for us to see your problems or test patches.

Thanks!

Reply via email to