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