2010-02-26 7 views
1

내 페이지 :사용자 정의 메시지가 페이지에 표시되지 않습니다 (JSF)

... 
    <div id="header"> 
     <!-- content header --> 
    </div> 
    <div id="content"> 
     <h:messages /> 
     <h:ouputText value="#{example.text}" /> 
    </div> 
... 

내 ManagedBean은 :

public class ExampleManagedBean(){ 
     private String text; 


     public String getText(){ 
      FacesContext.getCurrentInstance(). 
        addMessage(null, 
         new FacesMessage(FacesMessage.SEVERITY_WARN, 
             "Warning message...", null)); 
      return text; 
     } 

     public void setText(String text){ 
      this.text = text; 
     } 
    } 

내 문제는되지 않는 경고 메시지 페이지에서 렌더링됩니다. 왜?

+0

거기에 ''이 있습니까? 페이지가 새로 고쳐 집니까? – Bozho

+0

예, 입니다. 첫 페이지이므로 페이지가 새로 고쳐지지 않습니다. – bblanco

+0

@Bozho : 표시를 위해 메시지를 내보내려면 ''이 필요합니까? – Rachel

답변

1

JSF 수명주기 유효성 검사 단계에서 FacesMessage가 < h : messages/> (으)로 전송됩니다. 귀하의 경우 getter는 빈 속성 값을 파생시키는 데 사용되고 유효성 검사가 수행되지 않으므로 메시지가 비어 있습니다.

이론적으로 setter 유효성 검사를 사용할 수 있지만 well known antipattern입니다.

당신은 검증 "손으로"할 수 있지만, 다른 방법으로

<div id="content"> 
    <h:messages /> 
    <h:form> 
     <h:outputText value="#{example.text}" /> 
     <h:commandButton value="Click" action="#{example.action}"/> 
    </h:form> 
</div> 

와 액션 메소드에 내장 또는 사용자 정의 유효성 검사기를 사용하는 것이

public String action(){ 
    FacesContext.getCurrentInstance(). 
     addMessage(null, 
      new FacesMessage(FacesMessage.SEVERITY_WARN, 
             "Warning message...", null)); 
      return null; 
} 

많은 청소기 방법입니다 수 있습니다.

+0

죄송 합니다만, 완전히 틀렸어. OP 게시 코드 별 유효하고 작동해야합니다. FacesMessage는 렌더링 응답 중에 파생됩니다. 문제는 어딘가에 있으며, OP는 아직 Bozho의 의견을 토대로 그것을 분명히하고있다. 그때까지는 어둠 속에서만 촬영하고 있습니다. – BalusC

+0

예, 입니다. 첫 번째 페이지이므로 페이지가 새로 고쳐지지 않습니다. – bblanco

3

두 가지 아이디어가 있습니다.

먼저 메시지가 getText() getter에 추가됩니다. h : 메시지가 h : outputText보다 먼저 렌더링되면 h : 메시지가 렌더링 될 때 아직 메시지가 없을 수 있습니다.

두 번째, 리디렉션시 메시지가 사라집니다.

관련 문제