Hello Andreas,

I don't think Tobago or JSF can clear the messages for you. But you can clear the messages on the page yourself with
some javascript before the action for the PDF generation gets submitted.

For example:

...
action="controller.createPDF"
onclick="clearMessagesAndSubmit('@autoId')"
...

function clearMessagesAndSubmit(actionId) {
 // Find messages and clear them
 Var message = document.getElenemtById('page:message');
 message.value = "";
 Tobago.submitAction(actionId, false);
}

I haven't tried this, but I think it should work.

Regards
Helmut

----- Original Message ----- From: "Andreas Niemeyer" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, December 10, 2008 11:11 AM
Subject: Re: JSF servlet request in action method or navigation rule to get binary servlet data?


Hello Bernd,

Yes, I did.

There seems to be no way to get previous messages away due I don't get the page reloaded.

I'll open a new thread and try to describe in more detail the "requirements".


Thank you.

Regards,
Andreas



Bernd Bohmann schrieb:
Hello Andreas,

are you calling FacesContext.getCurrentInstance().responseComplete() ?

Regards

Bernd


Andreas Niemeyer schrieb:
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