Hello Andreas, maybe this help:
http://wiki.apache.org/myfaces/Sending_Files You don't need a Servlet for sending binary data from jsf. The magic is the responseComplete() method. Please look at the Section 2.1.3 Faces Request Generates Non-Faces Response of the jsf 1.1 spec. Regards Bernd Andreas Niemeyer schrieb: > Hi, > > I would like to send form data from a JSF page for a servlet request > with a navigation rule. > > The servlet returns a content type of "application/pdf" and is running > in a context path. > > If I call it from within a action method, it works with following code: > > public String createPDFReport() { > ... > FacesContext context = FacesContext.getCurrentInstance(); > ExternalContext ext = context.getExternalContext(); > > String vServletPath = "/context_path/pdf-test"; > ext.redirect(ext.encodeResourceURL(vServletPath)); > > ... > return "call_servlet"; > } > > > My context is a portal, I'm using the JSF portal bridge. > > > The web.xml looks like: > > ... > <servlet> > <servlet-name>pdf-test</servlet-name> > <servlet-class>com.xxx.PDFTest</servlet-class> > <load-on-startup>20</load-on-startup> > </servlet> > ... > > I would like to avoid to send a redirect and would prefer to create a > navigation rule in the faces-config, but it fails with an exception > arised from my GenericPortlet > > ... > > public class JSFGenericPortlet > extends org.apache.myfaces.portlet.MyFacesGenericPortlet { > ... > public void render(RenderRequest req, RenderResponse res) > throws IOException, PortletException { > ... > super.render(req, res); > } > ... > } > > javax.portlet.PortletException: String index out of range: -1 > at > org.apache.myfaces.portlet.MyFacesGenericPortlet.handleExceptionFromLifecycle(MyFacesGenericPortlet.java:310) > > at > org.apache.myfaces.portlet.MyFacesGenericPortlet.facesRender(MyFacesGenericPortlet.java:502) > > at > org.apache.myfaces.portlet.MyFacesGenericPortlet.doView(MyFacesGenericPortlet.java:323) > > at javax.portlet.GenericPortlet.doDispatch(GenericPortlet.java:328) > at javax.portlet.GenericPortlet.render(GenericPortlet.java:233) > at > com.gutzmann.portlets.JSFGenericPortlet.render(JSFGenericPortlet.java:73) > > > The navigation rule looks like: > > <navigation-rule> > <from-view-id>/pages/view.xhtml</from-view-id> > <navigation-case> > <from-outcome>call_servlet</from-outcome> > <to-view-id>/pdf-test/</to-view-id> > </navigation-case> > </navigation-rule> > > I tried also `<to-view-id>/context_path/pdf-test/</to-view-id>' - same > exception. > > > > What is the "best practice" to do such redirect / servlet calls? > > > If request parameter should be changed, how would it work in the action > method? > > > Many thanks fro some help! > > > Regards, > Andreas > > > > > >

