2017-09-06 7 views
0

사용자가 여러 정보를 입력하는 JSF 페이지가 있습니다. 사용자가 데이터를 제출하면 먼저 유효성을 검사하고 제출이 성공하면 사용자는 FacesMessage도 받아야합니다.XSP JSF FacesContext addMessage가 항상 작동하지 않는 경우

는 내가 모든 단일 페이지에 사용하고 메뉴 모음에 대한 사용자 정의 제어 할 수 있습니다 :

<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"> 
    <xp:panel> 
     <xp:this.facets> 
      <!-- Some Logos and stuff --> 
       <xp:panel xp:key="contentFacet"> 
        <xp:callback facetName="contentContainer"></xp:callback> 
       </xp:panel> 
     </xp:this.facets> 
    </xp:panel> 
</xp:view> 

입니다 다음 다음과 같은 방법으로 사용되는 메뉴 : cc_content_form이 컨트롤을 사용

<xc:cc_layout_main><xp:this.facets> 
    <xp:panel xp:key="contentContainer"> 
     <xc:cc_content_form></xc:cc_content_form></xp:panel> 
    </xp:this.facets></xc:cc_layout_main> 

를 :

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:messages id="messages1" styleClass="test" layout="table" 
     errorClass="alert-warning" fatalClass="alert-danger" 
     infoClass="alert-info" warnClass="alert-warning" showDetail="true" 
     showSummary="true" disableTheme="false" globalOnly="false"> 
    </xp:messages> 

    <xp:scriptBlock id="scriptBlock1"> 
     <xp:this.value><![CDATA[ 
// Validierungs Nachrichten entfernen 
var delayMs = 750; 
$('body') 
    .on('click', function(event){ 
     x$('#{id:messages1}').delay(delayMs).fadeOut(500); 
    }) 
    .on('keyup', function(event){ 
     x$('#{id:messages1}').delay(delayMs).fadeOut(500);   
    }) 
]]></xp:this.value> 
    </xp:scriptBlock> 

</xp:view> 

제출 기능에서 나는 이것을 검증 기능에 사용하고 있습니다 :

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "error", "some error")); 

이 호출은 모든 페이지에서 사용할 수 있도록 싱글 톤 패턴의 도우미 클래스 메서드로 래핑됩니다. 유효성 검사 메시지의 경우이 동작은 제대로 작동하지만 actionResult "xsp-success"를 반환하기 전에 valdiation 메서드에서 더 이상 작동하지 않습니다. 메시지가 나타나지 않습니다. 예외가 없습니다.

아무도 도와 드릴 수 있습니까?

답변

0

나는 NavigationRules를 엉망으로 만든다. ... 그게 잘 작동한다.