Craig,

i tried the struts-faces-example with myfaces
and RI (worked out of the box)

this happens with myfaces:

i clicked LINK "editRegistration.do?action=Create"
and become IllegalArgumentException:

could not find pathMapping for servletPath = /editRegistration.do
requestPathInfo = null
        
net.sourceforge.myfaces.application.jsp.JspViewHandlerImpl.getServletMap
ping(JspViewHandlerImpl.java:407)
        
net.sourceforge.myfaces.application.jsp.JspViewHandlerImpl.renderView(Js
pViewHandlerImpl.java:185)
        
org.apache.struts.faces.application.ViewHandlerImpl.renderView(ViewHandl
erImpl.java:134)
        
net.sourceforge.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.jav
a:282)
        
org.apache.struts.faces.application.FacesRequestProcessor.doForward(Face
sRequestProcessor.java:148)


okay, after that i looked in myfaces JspViewHandlerImpl.java
and noticed we only react on FacesServlet-Mappings (eg *.faces,
/faces/*,...)
i changed it, now it works

but as a result of following discussion on myfaces-mailinglist
(see the three forwards)

i decided to create that wrapper,
that sets requestPath from struts (*do)
to faces (*.faces) now it works again with myfaces and of course RI

so perhaps you have other hints on that?

Matthias

> -----Original Message-----
> From: Craig McClanahan [mailto:[EMAIL PROTECTED] 
> Sent: Thursday, July 08, 2004 3:27 AM
> To: Struts Developers List
> Cc: [EMAIL PROTECTED]
> Subject: Re: [Struts-Faces] wrapping a HttpServletRequest
> 
> 
> Matthias Wessendorf wrote:
> 
> >Hi, i tried the faces-struts-lib with RI.
> >It works.
> >
> >  
> >
> Matthias,
> 
> Could you please explain in more detail exactly what appears 
> to you to 
> be a bug in the struts-faces library that requires this wrapper, and 
> also what unspecified behavior in the RI is being relied on?  This is 
> not at all obvious to me -- and I intend to pull the wrapper back out 
> unless you can show me why it's needed.  The explanation 
> below, and all 
> the mail threads and messages on bug 29809, still haven't 
> made it clear 
> to me what the problems you are trying to solve really are.
> 
> Craig
> 
> 
> 
> >But not with Open-Source-Implementation *MyFaces*.
> >i notices, that in struts-faces the servletPath is
> >a *.do (or that for struts).
> >
> >But it must be an faces-mapping for servlet-Path
> >(*.faces e.g.)
> >the FacesRequestProcessor know if request is for
> >ActionSerclet or not.
> >
> >If not, it delegates it to JSF-Impl.
> >Base of checking is a URI, that is configed
> >in <forward name="success" path="/test.faces"/> (e.g.)
> >
> >so i wrote a simple HttpServletRequestWrapper
> >which wrappes the uri as new ServletPath.
> >now everything is fine.
> >
> >like this (in FacesRequesProcessor)
> ><code>
> >           FacesContextFactory fcf = (FacesContextFactory)
> > 
> >FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY);
> >
> >                HttpServletRequestWrapper wrapper = new
> >HttpServletRequestWrapper(request,uri);
> >
> >
> >            context = 
> fcf.getFacesContext(servlet.getServletContext(),
> >wrapper,
> >                                          response, lifecycle);
> ></code>
> >it is not an error in myfaces-impl. 
> >it is an bug in the RI.
> >
> >please see the email of Ted Husted (on myfaces-list)
> ><ted>
> >
> >On Wed, 23 Jun 2004 20:21:49 -0700, 
> >[EMAIL PROTECTED] wrote:
> >  
> >
> >>the MyFaces implementation is correct in this aspect and I 
> don't think
> >>    
> >>
> >
> >  
> >
> >>we should clone the bugs of the RI just because struts 
> relies on them.
> >>    
> >>
> >
> >  
> >
> >>I hope spec-compliant does not mean we have to have the 
> same bugs the
> >>RI has ;-)? By the way, if the RI is fixed, struts will not 
> work there
> >>    
> >>
> >
> >  
> >
> >>any longer, too.
> >>    
> >>
> >
> >The RI and Struts-Faces were created in tandem, so it's not 
> surprising 
> >the same assumptions crop up in each. But, no, 
> specification-compliant 
> >does not mean that we should rely on bugs in any implementation, 
> >including the RI. In fact, the Struts tradition has been to 
> expose bugs 
> >in implementations so that vendors are compelled to fix them.
> >
> >If you develop any patches you would like applied, please 
> bring them to 
> >my attention. Once we can get 1.2.1 out-the-door (could be 
> this week), 
> >we will be setting up several subprojects, including 
> Struts-Faces, that 
> >can be released separately.
> >
> >  
> >
> >>So the clean solution from my point of view is to fix the issue in
> >>struts. For example it would be possible to wrap the 
> servlet request 
> >>before the FacesContext is created. The wrapper takes the 
> uri of the 
> >>view to be displayed to simulate a valid jsf servlet path 
> for the view
> >>    
> >>
> >
> >  
> >
> >>manager. What do you think?
> >>
> >>Oliver
> >>    
> >>
> >
> ></ted>
> >
> >
> >and here is the simple wrapper-class:
> >i can apply a patch, but on that i will
> >do a bit better documentation of that
> >wrapper-class
> >
> >
> >Cheers,
> >Matthias
> >
> >/*
> > * Copyright 2002,2004 The Apache Software Foundation.
> > *
> > * Licensed under the Apache License, Version 2.0 (the "License");
> > * you may not use this file except in compliance with the License.
> > * You may obtain a copy of the License at
> > * 
> > *      http://www.apache.org/licenses/LICENSE-2.0
> > * 
> > * Unless required by applicable law or agreed to in 
> writing, software
> > * distributed under the License is distributed on an "AS IS" BASIS,
> > * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> >implied.
> > * See the License for the specific language governing 
> permissions and
> > * limitations under the License.
> > */
> >package org.apache.struts.faces.util;
> >
> >import java.io.BufferedReader;
> >import java.io.IOException;
> >import java.io.UnsupportedEncodingException;
> >import java.security.Principal;
> >import java.util.Enumeration;
> >import java.util.Locale;
> >import java.util.Map;
> >
> >import javax.servlet.RequestDispatcher;
> >import javax.servlet.ServletInputStream;
> >import javax.servlet.http.Cookie;
> >import javax.servlet.http.HttpServletRequest;
> >import javax.servlet.http.HttpSession;
> >
> >/**
> > * <p>Concrete implementation of <code>HttpServletRequest</code> that
> > * that wrapps the <code>ServletPath</code> with an URI, that was 
> >detected
> > * by <code>ActionServlet</code> to forward to a standard 
> ><code>FacesServlet</code>.
> > *
> > */
> >public class HttpServletRequestWrapper implements 
> HttpServletRequest {
> >
> >     // ------------------------------------------------------
> >Instance Variables
> >     
> >     protected HttpServletRequest original = null;
> >     protected String servletPath = null;
> >
> >     // ------------------------------------------------------------
> >Constructors
> >
> >
> >     /**
> >      * <p>Construct a new <code>HttpServletRequest</code> instance
> >      * and an URI, which is used by <code>FacesServlet</code>.</p>
> >      *
> >      * @param request Original default 
> <code>HttpServletRequest</code>
> >      *
> >      * @param servletPat the new ServletPath for a
> ><code>FacesServlet</code>
> >      *
> >      */
> >     
> >     public HttpServletRequestWrapper(HttpServletRequest 
> request, String 
> >servletPath){
> >             this.original = request;
> >             this.servletPath = servletPath;
> >     }
> >
> >     // ----------------------------------------------------------
> >Public Methods
> >
> >
> >     /**
> >      * <p>Returns the new <code>ServletPath</code> needed by a 
> >FacesServlet.</p>
> >      *
> >      */
> >     public String getServletPath() {
> >             // TODO Auto-generated method stub
> >             return this.servletPath;
> >     }
> >
> >     // ----------------------------------------------------------
> >Delegate Methods
> >     
> >     
> >     /* (non-Javadoc)
> >      * @see java.lang.Object#equals(java.lang.Object)
> >      */
> >     public boolean equals(Object arg0) {
> >             return original.equals(arg0);
> >     }
> >
> >     ...
> >}
> >
> >
> >
> >
> >---------------------------------------------------------------------
> >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]

Reply via email to