2012-05-10 1 views
1

다음은 시나리오입니다. 내 관리 빈에서, 나는 새로운 FacesMessage 객체를 만들고과 같이, 어떤 UI 구성 요소와 연관없이 FacesContext에 추가 : 그래서 같은JSF : FacesMessage가 두 번 표시됩니다.

FacesContext context = FacesContext.getCurrentInstance(); 
FacesMessage message = new FacesMessage(); 
message.setSummary("Hi there!"); 
context.addMessage(null, message); 

을 내 XHTML 페이지에서 I 출력 내 메시지 :

<h:messages id="someId" globalOnly="true" showSummary="true" showDetail="false" styleClass="startUpMessages"/> 

그러나, 생성 된 HTML이 같은 두 번 메시지의 요약을 표시

<ul id="mainForm:someId" class="startUpMessages"><li> Hi there! </li><li> Hi there! </li></ul> 
<ul id="javax_faces_developmentstage_messages" title="Project Stage[Development]: Unhandled Messages"></ul> 

사람이 동작을 설명 할 수 있습니까?

+1

당신은 메시지를 추가하기위한 코드가 여러 번 실행하지 않는 것이 확실하다? 간단한 인쇄물을 배치하십시오 ..... – Daniel

+0

제안한대로 FacesMessage 작성 옆에 관리 Bean에 인쇄물을 배치했습니다. 인쇄물은 한 번만 나타납니다. – Jim

+0

그냥 호기심이 생기면 context.addMessage ("test", message); globalOnly = "false"는 다른 메시지를 제거합니까? –

답변

2

-Development에서
변경 PROJECT_STAGE이 문제가 질문에서 언급되지 않은 응용 프로그램에서 단계 리스너의 감독에 의해 발생 된 밝혀졌습니다.

위상이 수신기는 애플리케이션의 특정한 경우에, 두 개의 인접한 여러 요청을 FacesMessages 지속성에 문제를 해결하기 위해 설계되었다. 요청 범위 Bean에서 생성 된 모든 FacesMessages를 세션에 임시로 저장합니다.

그러나, 단계 리스너이었다 mistakingly 모든 요청시 실행하도록 구현. 그래서 FacesMessages가 세션 스코프 된 빈 (문제의 것과 같이)에서 생성되어 중복되어 결국 왜 메시지 요약이 두 번 표시되는지 알 수 있습니다.

0

은 web.xml에 변경하려고합니다. Production

<!-- Web application context parameters --> 
<context-param> 
    <description>One of Production, Development, UnitTest, SystemTest, Extension 
     Default is Production. 
    </description> 
    <param-name>javax.faces.PROJECT_STAGE</param-name> 
    <param-value>Production</param-value> 
</context-param> 
+0

처리되지 않은 메시지 만 숨 깁니다. OP의 경우 중복 된 메시지는 처리되지 않은 메시지가 아닙니다. – BalusC