2013-02-25 1 views
0

single_selection 데이터 테이블과 명령 단추가있는 페이지가 있습니다. 커맨드 버튼은 선택이되었는지를 확인하는 bean 메소드를 호출합니다. 그렇지 않으면 사용자에게 경고하는 메시지를 표시해야합니다. 선택이 이루어지면 다른 페이지로 이동합니다.primefaces 메시지가 표시되지 않습니다.

문제는 선택 항목이 없을 때 메시지가 표시되지 않는다는 것입니다. 선택이 이루어진다면 잘 작동합니다.

<h:body> 
<h:form id="form"> 
<p:dataTable id="TablaSociedades" var="soc" value="#{Sesion.tablaSociedades}" emptyMessage="No hay Registros que Mostrar" selection="#{Sesion.sociedadUsuario}"> 
    <f:facet name="header">Sociedades asociadas al Usuario</f:facet> 
    <p:column selectionMode="single" style="width:18px" /> 
    <p:column> 
     <f:facet name="header"> 
      <h:outputText value="Sociedad" /> 
     </f:facet> 
      <h:outputText value="#{soc.nombreSociedad}" /> 
    </p:column> 
    <f:facet name="footer"> 
    <p:commandButton action="#{Sesion.mostrarMenu()}" value="Continuar" process=":form" /> 
    </f:facet> 
</p:dataTable> 
<br/> 
<div> 
    <p:messages id="messages2" showDetail="true" autoUpdate="false" closable="true" /> 
</div> 
</h:form> 
</h:body> 

그리고 빈 메서드에 대한 코드 :

public boolean mostrarMenu() 
{ 
    boolean resp = true; 

    if (sociedadUsuario.getNombreSociedad().equals("")) //no selection 
    { 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage (FacesMessage.SEVERITY_WARN,"Seleccione una Sociedad", "No puede Continuar")); 
     resp = false; 
    } 

    return resp; 
} 

내가 명령 단추를 두 번 클릭해야 함을 언급해야하지만 난 또 다른 질문을 게시합니다 여기

이 페이지에 대한 코드입니다 그 문제에 대해.

메시지가 올바르게 표시되는 bean validation을 가진 또 다른 페이지를 만들었지 만이 페이지와 유일한 차이점은 다른 페이지에는 inputText, commandbutton 및 messages 만 있다는 것입니다. faces-config.xml 파일에 대한 시간

02/25/13 코드에 대한

감사합니다.

<navigation-rule> 
    <from-view-id>/elegirSociedad.xhtml</from-view-id> 
    <navigation-case> 
    <from-action>#{Sesion.mostrarMenu()}</from-action> 
    <from-outcome>true</from-outcome> 
    <to-view-id>/principal.xhtml</to-view-id> 
    <redirect /> 
    </navigation-case> 
</navigation-rule> 

나는 한번도하지만 당신이 그것을 업데이트되지 않았기 때문에

답변

4

두 가지 이상의 페이지에 대해 동일한 관리 빈을 사용하는 경우 for 속성을 사용하여 메시지를 식별하고 bean 메소드에서 메시지를 작성할 때 동일한 ID를 사용하십시오.

<p:messages for="MessageId" showDetail="true" autoUpdate="true" closable="true"> 

때 당신이 당신의 관리 빈에서 메시지를 작성 :

FacesContext.getCurrentInstance().addMessage("MessageId", new FacesMessage (FacesMessage.SEVERITY_WARN,"Be Warned!", "You did something wrong!")); 

그래서 당신의 관리 빈의 각 메시지는 페이지에서 해당 구성 요소가 예를 들어.

0

메시지가 표시되지 않습니다 아무 소용이 의견은 "두 번 클릭"문제를 방지하기 위해 리디렉션을 사용했다. 추가 update 속성을 당신의 p:commandButton에 : 나는 당신이 여기 탐색하는 방법 또한

<p:commandButton action="#{Sesion.mostrarMenu()}" value="Continuar" process=":form" update=":form:messages2"/> 

가 표시되지 않는 이유는 무엇입니까?

+0

내 명령 단추에서 업데이트 특성을 사용했습니다. true 및 false 메시지의 자동 업데이트 특성으로 시도했지만 메시지가 표시되지 않았습니다. 탐색은 faces-config.xml 파일 (업데이트 된 질문에 표시된 코드) – user2067146

+0

으로 정의됩니다. 마지막으로 문제를 발견하고 해결할 수 있습니다. 두 페이지에 동일한 빈을 사용하고 두 페이지에 다른 메시지가 표시되었습니다. addMessage를 사용할 때 컴포넌트 ID 속성을 사용하지 않았으므로 메시지가 글로벌 모드 였기 때문에 어떻게 든 두 번째 페이지에 메시지가 표시되지 않았습니다. 그래서 구성 요소 id 특성을 추가하고 메시지가 바로 표시됩니다. – user2067146