RESOLVIDO - [JSF] Não abrir a popup quando há FacesMessage para exibir

3 respostas
sfohart

Bom dia, pessoal.

Eu tenho o seguinte código:

<p:toolbar>
    <p:toolbarGroup align="left">
        <p:menuButton value="Arquivo" >
            <p:menuitem     value="#{systemMsg['action.new.label']}"
                            actionListener="#{paisMB.executePrepareAdd}" 
                            update="insertForm" 
                            oncomplete="#{p:widgetVar('insertDialog')}.show()" />
                            
            <p:menuitem     value="#{systemMsg['action.edit.label']}"
                            actionListener="#{paisMB.executePrepareUpdate}" 
                            update="editionForm" 
                            oncomplete="#{p:widgetVar('editionDialog')}.show()" />
                            
            <p:menuitem     value="#{systemMsg['action.delete.label']}"     
                            actionListener="#{paisMB.executePrepareDelete}"                                  
                            update="deleteForm"
                            oncomplete="#{p:widgetVar('deleteDialog')}.show()" />
            
        </p:menuButton>
        
    </p:toolbarGroup>
</p:toolbar>

Como fazer para que nenhum desses itens de menu abram as popups correspondentes se eu coloco um FacesMessage no contexto do jsf?

Obrigado pela atenção

3 Respostas

P

Não sei se entendi direito, mas ai voce ta pedindo pra sempre que concluir a ação ser chamado o dialog de confirmação, tente mudar a propriedade de oncomplete para onclick

oncomplete="#{p:widgetVar('deleteDialog')}.show()" />
sfohart

Tentei mudar pra onclick, mas não resolveu não

<p:toolbar>
    <p:toolbarGroup align="left">
        <p:menuButton value="Arquivo" >
            <p:menuitem     value="#{systemMsg['action.new.label']}"
                            actionListener="#{paisMB.executePrepareAdd}" 
                            update="insertForm" 
                            onclick="#{p:widgetVar('insertDialog')}.show()" />
                            
            <p:menuitem     value="#{systemMsg['action.edit.label']}"
                            actionListener="#{paisMB.executePrepareUpdate}" 
                            update="editionForm" 
                            onclick="#{p:widgetVar('editionDialog')}.show()" />
                            
            <p:menuitem     value="#{systemMsg['action.delete.label']}"     
                            actionListener="#{paisMB.executePrepareDelete}"                                  
                            update="deleteForm"
                            onclick="#{p:widgetVar('deleteDialog')}.show()" />
                            

            <p:menuitem     value="#{systemMsg['action.print.label']}" 
                            ajax="false" async="false"
                            actionListener="#{paisMB.executePrintReportListing}"  
                            />
            
        </p:menuButton>
        
    </p:toolbarGroup>
</p:toolbar>
sfohart

Desculpem, pessoal, consegui resolver. Tive que utilizar uma função javascript e colocar um parâmetro no escopo de “Flash” do JSF.

Segue o código final e uma screenshot de tela pra vocês verem

Minha toolbar

<p:toolbar>
    <p:toolbarGroup align="left">
        <p:menuButton value="Arquivo" >
            <p:menuitem     value="#{systemMsg['action.new.label']}"
                            actionListener="#{paisMB.executePrepareAdd}" 
                            update="gridMessages,insertForm" 
                            oncomplete="handleHideWidget(xhr, status, args, #{p:widgetVar('insertDialog')})"
                            />
                            
            <p:menuitem     value="#{systemMsg['action.edit.label']}"
                            actionListener="#{paisMB.executePrepareUpdate}" 
                            update="gridMessages,editionForm" 
                            oncomplete="handleHideWidget(xhr, status, args, #{p:widgetVar('editionDialog')})"
                            />
                            
            <p:menuitem     value="#{systemMsg['action.delete.label']}"     
                            actionListener="#{paisMB.executePrepareDelete}"                                  
                            update="gridMessages,deleteForm"
                            oncomplete="handleHideWidget(xhr, status, args, #{p:widgetVar('deleteDialog')})"
                            />
                            

            <p:menuitem     value="#{systemMsg['action.print.label']}" 
                            ajax="false" async="false" update="gridMessages"
                            actionListener="#{paisMB.executePrintReportListing}"  
                            />
            
        </p:menuButton>
        
    </p:toolbarGroup>
</p:toolbar>

Onde deveriam aparecer as mensagens de erro:

<p:messages globalOnly="true" id="gridMessages" showDetail="true" />

Função javascript que utilizei:

function handleShowWidget(xhr, status, args, widget) {
	if (! args.validationFailed && ! args.exceptionThrown ) {
		widget.show();
	}
}

Screenshot de tela:

Uploaded with ImageShack.us

Criado 9 de maio de 2011
Ultima resposta 9 de mai. de 2011
Respostas 3
Participantes 2