myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Niemeyer <andreas.nieme...@gutzmann.com>
Subject Re: JSF servlet request in action method or navigation rule to get binary servlet data?
Date Wed, 10 Dec 2008 12:21:24 GMT
Hello Helmut,

Good proposal to handle this about JavaScript before send the form. I'll 
give it a trial.

Kind regards,
Andreas


Helmut Swaczinna schrieb:
> 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" 
> <andreas.niemeyer@gutzmann.com>
> To: <users@myfaces.apache.org>
> 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
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>
>>
>>
> 
> 


Mime
View raw message