2013-07-20 3 views
10

page1.jsf가 있습니다.이 페이지에는 ELFlash에 객체를 놓고 리디렉션하는 commandButton이 있습니다. page2.jsf. 이 페이지에서는 ELFlash로 개체를 복구합니다. 모든 것이 잘 작동합니다. 사용자가 page2.jsf에 남아있는 동안 그러나, 모든 아약스 요청, 바람둥이는이 경고 메시지를 보여줍니다JSF로부터 경고 받기 : 플래시의 발신 쿠키를 설정하려고 할 때까지 이미 응답이 완료되었습니다.

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. 

정말 무엇을 의미 하는가?

+2

실제로 이것은 Mojarra에서 Flash가 여전히 고장 났음을 의미합니다. 어떤 Mojarra 버전을 사용하고 있습니까? – BalusC

+0

[this] (http://stackoverflow.com/questions/17668986/exception-about-flash-with-jsf-2-2-1)와 관련이 있습니까? –

+0

[JSF-2896] (https://java.net/jira/browse/JAVASERVERFACES-2896) 일 수 있습니다. 필자는 여전히 Mojarra-2.2.5에서 Post-Redirect-Get 및 Omnifaces의'addFlash()'를 복잡한 페이지에서 사용하고 있습니다. – mabi

답변

-1

플래시는 이름이 jsf의 수명주기 사이에 일시적인 컨테이너 개념 일 것을 제안해야합니다. 요점은 다음과 같습니다 : 플래시에 저장된 객체는 다음에 볼 수있는 바로 다음 뷰에서 사용자에게 홍보 될 것입니다 (jsf가 mvc 다음에 있음을 기억하십시오). 따라서 '사용중'이 된 후 사라지게됩니다. 즉 제거됩니다.

나는 그것이 당신이 그런 오류를 얻는 이유이며, 그것이 mojarra와 직접 관련이 없다고 생각합니다.

+0

당신은 구체적인 질문에 전혀 대답하지 않습니다. 이상적으로, 경고 메시지는 전혀 표시되지 않아야합니다. 답안의 어떤 것도 그 해결책을 제시하지 못합니다. – BalusC

+0

'다음 요청시 플래시에 저장된 모든 값을 사용할 수 없습니다.' : o – LMG

+0

이것은 경고 메시지 일 뿐이며 예상되는 동작을 알려주며 경고에 표시 할 이유가 없다는 것을 의미합니다. 내 질문은 왜 이런 일이 발생했는지입니다. –

3

문제는 http 청킹과 관련이있을 것이라고 생각합니다. 해결책은 응답 버퍼 크기를 늘리는 것입니다. 쿠키가 올바르게 설정되고 Flash Scope가 작동해야합니다.

사용이 코드 :

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() {} 
} 

그리고 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

이 현재 우리에게 효과가있는 유일한 방법입니다. 우리 기록은 mojarra의이 짜증나는 경고로 가득 찼습니다. 2.2.14 – Steve

3

대신 @Rafal K 답변에서 언급 한 바와 같이 필터를 사용하여, 당신은 또한 의해 응답 버퍼 크기를 늘릴 수 있습니다 당신의 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> 

크기는 바이트 단위로 주어진다에 컨텍스트 매개 변수를 설정 가장 큰 페이지보다 커야합니다. 오른쪽 클릭하고 View Page Info을 선택하여 Firefox에서 페이지 크기를 쉽게 확인할 수 있습니다.