2013-07-20 16 views
10

Ho un page1.jsf, in questa pagina ho un commandButton che inserisce un oggetto in ELFlash e reindirizza a page2.jsf. In questa pagina recupero l'oggetto da ELFlash. Tutto funziona bene Ma mentre l'utente rimane in page2.jsf, per ogni richiesta Ajax, Tomcat mostra questo messaggio di avviso:Ricevi avviso da JSF: la risposta è stata già confermata dal momento in cui si è tentato di impostare il cookie in uscita per il flash

20/07/2013 09:43:37 com.sun.faces.context.flash.ELFlash setCookie 
WARNING: JSF1095: The response was already committed by the time we tried to set the outgoing cookie for the flash. Any values stored to the flash will not be available on the next request. 

cosa significa veramente?

+2

Significa davvero che Flash è ancora rotto in Mojarra. Quale versione di Mojarra stai usando? – BalusC

+0

Potrebbe essere correlato a [questo] (http://stackoverflow.com/questions/17668986/exception-about-flash-with-jsf-2-2-1)? –

+0

Potrebbe essere [JSF-2896] (https://java.net/jira/browse/JAVASERVERFACES-2896). Sto ancora vedendo questo con Mojarra-2.2.5, usando Post-Redirect-Get e Omnifaces 'addFlash() 'in una pagina complessa. – mabi

risposta

-1

Flash come dovrebbe suggerire il nome è destinato a essere una sorta di concetto contenitore temporaneo tra il ciclo di vita del JSF. Il punto è il seguente: l'oggetto memorizzato nel flash sarà promozionato all'utente nella prossima vista che incontrerà (ricorda che jsf segue il mvc), quindi dopo essere stato "usato" scomparirà, cioè verrà rimosso.

Penso che sia per questo che si ottiene tale errore e che non è correlato direttamente con mojarra.

+0

Non stai rispondendo alla domanda concreta. Idealmente, quei messaggi di avviso non dovrebbero essere mostrati affatto. Nulla nella tua risposta offre una soluzione a questo. – BalusC

+0

Cosa dire di "Qualsiasi valore memorizzato nel flash non sarà disponibile alla prossima richiesta." ?? : o – LMG

+0

Questo è solo il messaggio di avviso, e mi dice solo il comportamento previsto, il che significa che non c'era alcun motivo per essere mostrato in un avvertimento, e la mia domanda era, perché questo sta accadendo. –

3

Penso che il problema potrebbe essere correlato a http chunking. La soluzione è aumentare la dimensione del buffer di risposta. Successivamente i cookie verranno impostati correttamente e anche Flash Scope dovrebbe funzionare.

di questo codice:

public class FlashScopeFixerFilter implements Filter { 
@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    // Below line: response.getWriter() must be invoked to buffer size setting work. Just DO NOT touch this! 
    response.getWriter(); 
    HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response); 
    wrapper.setBufferSize(10000000); 
    chain.doFilter(request, wrapper); 
} 

@Override 
public void init(FilterConfig arg0) throws ServletException {} 
@Override 
public void destroy() {} 
} 

E in web.xml:

<filter> 
    <filter-name>FlashScopeFixerFilter</filter-name> 
    <filter-class>dk.sd.medarbejderdata.common.FlashScopeFixerFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>FlashScopeFixerFilter</filter-name> 
    <url-pattern>*.xhtml</url-pattern> 
</filter-mapping> 
+0

che attualmente è l'unica cosa che funziona per noi. i nostri registri erano ancora pieni di questo fastidioso avvertimento a mojarra 2.2.14 – Steve

3

Invece di utilizzare un filtro come indicato nel @Rafal K risposta, si può anche aumentare la dimensione del buffer di risposta da parte l'impostazione di un parametro di contesto nel vostro web.xml

<!-- increase buffer size to avoid JSF1095 errors --> 
<context-param> 
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name> 
    <param-value>131072</param-value> 
</context-param> 

La dimensione è data in byte e dovrebbe essere più grande della tua pagina più grande. Puoi facilmente controllare la dimensione delle tue pagine in Firefox facendo clic destro e selezionando View Page Info.