2013-07-10 3 views
0

preRenderView 호출 된 메서드에서 일부 유효성 검사가 수행되고 실패하면 리디렉션이 발생합니다. 에 가정이 주제에 관한jsf IllegalStateException 반환과 함께 심지어 리디렉션시

public static void addMessageInvalidLinkRedirect(FacesContext context, String url) 
{ 
    context.addMessage(null, new FacesMessage("Invalid link...")); 
    try 
    { 
     context.getExternalContext().redirect(url); 
    } 
    catch (final IOException e) 
    { 
     // add error message 
    } 
} 

많은 답변 :

public void initPreRenderView(final String value) throws DatabaseException 
{ 
    if (value == null) 
    { 
     FacesContextUtils.addMessageInvalidLinkRedirect(context, url); 
     return; 
    } 
} 

기본적으로 유틸리티 기능으로 구성

그러나 내가 여기 IllegalStateException

Information: Exception when handling error trying to reset the response. 
java.lang.IllegalStateException 
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:524) 
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:602) 
    at package.FacesContextUtils.redirect(FacesContextUtils.java:581) 

무엇입니까 코드입니다 preRenderView m에서 수행 한 리디렉션 문 다음에 return을 추가합니다. ethod.

편집 :

리디렉션이 발생하고 모든 것이 예상대로 작동합니다. 이 오류 메시지를 없애기 만하면됩니다.

+0

왜보기를 렌더링하기 전에 리디렉션을 시도하고 있습니까? –

+0

사용자가 유효한 view-param없이 뷰를 방문하도록되어 있지 않습니다. 이 경우는 절대로 발생하지 않지만 사용자가 손으로 URL을 조작하면 여전히 발생할 수 있습니다. – djmj

+0

''에 유효성 검사기를 사용할 수 있습니다. http://stackoverflow.com/q/4888942/1065197 –

답변

2

문제는 return 문의 유무가 아닙니다. 문제는 응답을 다시 설정할 수 없다는 것입니다. 이것이 원인이되는 경우의가 보자 : source code이를 바탕으로

java.lang.IllegalStateException 
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:524) 

가 발생 될 때 isCommitted() 반환 true. 따라서 응답은 이미 커밋됩니다. 응답의 일부가 이미 클라이언트로 전송되었습니다.

귀하의 질문에 아무것도 표시되어 있지 않습니다. 따라서 문제의 원인은 지금까지 제공된 정보보다 다른 곳에서 찾아야합니다. 표준 JSF에서 이것은 일어나지 않아야한다. 그래서 당신은 어딘가에 몇몇 헤더를 설정/커밋하고있는 서블릿 필터를 가지고있을 것이다.

+0

일부 헤더를 설정/커밋한다는 것은 무엇을 의미합니까? 나는이 답변에서 귀하의 NoCacheFilter를 사용하고 있습니다 : http : // stackoverflow.co.kr/questions/14101380/jsf-back-button-refresh-page를 참조하십시오. 다른 인증 필터를 사용하여 사용자가 로그인되어 있는지 확인하고 그렇지 않은 경우 리디렉션합니다. 나는 이것을 조사 할 것이다. – djmj

+0

다시 점검 할 시간이 없지만이 오류가 항상 발생하지는 않습니다. 그런 다음 발생하지만 여전히 리디렉션됩니다 (로그에만 있음). 사이트에 다른 시간 오류가 표시됩니다. 내 시스템이 때로는 느려지는 것이 가능한가? – djmj

1

비슷한 문제가 발생했습니다. 문제는 내가 예상 한 것을 호출하기 전에 다른 리디렉션 요청이 만들어지고 있다는 것이 밝혀졌습니다. 하나의 리디렉션 요청이 이미 만들어 졌기 때문에 IllegalStateException을 발생시킵니다.