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