Hello Bernd,

Thank you for response.

Unfortunatly I have to use this servlet as a pdf dynamic provider.

The redirect works fine so far, but another thing happened.

Due some validation rules in the same method, a previous custom FacesMessage stays displayed and only after a page reload it goes away.

Have someone an idea?

Regards,
Andreas



Bernd Bohmann schrieb:
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








Reply via email to