Problema com Template JSF 2 e confirmDialog do PrimeFaces

4 respostas
D

Criei um template, depois chamei ele em uma pagina, ate ai tudo fmz
tudo funciona lindo, so que nesta pagina eu tenho um confirmDialog
O que esta acontecendo é o seguinte, quando eu clico para exibir o confirmDialog ele fica atras da marca d'agua
ou seja, não consigo clicar nele. Se eu colocar appendToBody="true" ele aparece certinho, mas quando clico nos botões
ele ate executa a função no action, mas não desaparece, mesmo clicando no botão que chama o hide()

segue o codigo do template

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns ="http://www.w3.org/1999/xhtml"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:ui="http://java.sun.com/jsf/facelets"
		xmlns:p="http://primefaces.org/ui">
	<h:head>
		<title>Financeiro HSC</title>
		<h:outputStylesheet name="estilo.css" library="css" />
	</h:head>

	<h:body>

	<p:layout style="min-width:1000px;min-height:800px;" id="layout">
		<p:layoutUnit position="west" resizable="true" size="100" minSize="150" maxSize="800"> 
			<h:form id="menu">
				<p:commandButton id="dynaButton" value="Cadastros" type="button"/>  
					 <p:slideMenu overlay="true" trigger="dynaButton" my="left top" at="left bottom" style="width:150px">  
					    <p:submenu label="Cadastros">  
					        <p:menuitem value="Banco" action="#{menuManager.irBanco}" ajax="false"/>  
					    </p:submenu>  
					</p:slideMenu>  
			</h:form>
		</p:layoutUnit>
		<p:layoutUnit position="center">
			<div id="header">
				<h:graphicImage dir="ltr" url="/imagens/logooficial.png" width="100" height="100" style="border:0px"/>
				<hr/>
			</div>
			
				<ui:insert name ="corpoPaginas"> Espaço para o conteúdo da tela </ui:insert>
			
			<div id="footer" style="text-align:center">
				<hr/>
				 Financeiro - HSConsultoria
			</div>
		</p:layoutUnit>
	</p:layout>

	 </h:body>
</html >

e o da pagina

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition template="/menu/template.xhtml"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
 	xmlns:h="http://java.sun.com/jsf/html"
  	xmlns:f="http://java.sun.com/jsf/core"
  	xmlns:pe="http://primefaces.org/ui/extensions"
 	xmlns:p="http://primefaces.org/ui">
  
	<ui:define name="corpoPaginas">
	<h:form id="banco">
		<p:messages globalOnly="true" showDetail="true" closable="true" id="msg"/>
		
		<p:panel>
		<f:facet name="header">
			<h:outputText value="Cadastrar Banco"/>
		</f:facet>
	
		<h:panelGrid columns="3">
			<h:outputText value="Numero Agencia: " />
			<p:inputText id="numeroAgencia" required="true" requiredMessage="Preencha o número da Agencia!" value="#{bancoManager.banco.numeroAgencia}"/>
			<p:message for="numeroAgencia" />
				
			<h:outputText value="Numero Conta: " />
			<p:inputText id="numeroConta" required="true" requiredMessage="Preencha o número da Conta!" value="#{bancoManager.banco.numeroConta}"/>
			<p:message for="numeroConta" />
			
			<h:outputText value="Nome: " />
			<p:inputText id="nome" required="true" requiredMessage="Preencha o nome Banco!" value="#{bancoManager.banco.nome}"/>
			<p:message for="nome" />
		
			<h:outputText value="Saldo Inicial: " />
			<pe:inputNumber disabled="#{bancoManager.atualizar}" id="saldoInicial" symbol="R$ " decimalSeparator="," thousandSeparator="." required="true" requiredMessage="Preencha o Saldo Inicial!" value="#{bancoManager.banco.saldoInicial}"/>
			<p:message for="saldoInicial" />
			
			<p:commandButton  value="#{bancoManager.botao}" global="true" action="#{bancoManager.cadastrar}" update="banco, msg" rendered="#{bancoManager.atualizar}"/>
			<p:commandButton  value="#{bancoManager.botao}" onclick="confirmationCadastro.show()" rendered="#{!bancoManager.atualizar}"/>
			<p:commandButton  value="Voltar" action="#{bancoManager.voltar}" update="@form" global="true" process="@this" rendered="#{bancoManager.atualizar}"/>
		</h:panelGrid>
		<p:separator/>
		
		<p:dataTable paginator="true" value="#{bancoManager.listaBancos}" var="banco" id="bancoCadastrados"
            paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
            rows="5" rowsPerPageTemplate="1,5,10,15" paginatorPosition="bottom"> 
            <f:facet name="header">
            	<h:outputText value="Bancos Cadastrados"/>
            </f:facet>
            
            <p:column headerText="Agencia" >
            	<h:outputText  value="#{banco.numeroAgencia}"/>
            </p:column>
            <p:column headerText="Conta">
            	<h:outputText value="#{banco.numeroConta}"/>
            </p:column>
            <p:column headerText="Nome">
            	<h:outputText value="#{banco.nome}"/>
            </p:column>
            <p:column headerText="Saldo Inicial" styleClass="colunadireita">
            	<h:outputText value="#{banco.saldoInicial}" >
            	<f:convertNumber currencySymbol="R$" groupingUsed="true"  maxFractionDigits="2" type="currency" locale="pt_BR"/>
            	</h:outputText>
            </p:column>
            
            <p:column headerText="Atualizar" styleClass="colunacentro">
            	<p:commandLink action="#{bancoManager.selecionar}" update="@form" process="@this" >
            	<h:graphicImage url="/imagens/atualizar.png" width="15" height="15" style="border:0px" />
            	</p:commandLink>
            </p:column>

            <p:column headerText="Excluir" styleClass="colunacentro">
            	<p:commandLink action="#{bancoManager.selecionar}" process="@this" onclick="confirmation.show()">
            	<h:graphicImage url="/imagens/excluir.png" width="15" height="15" style="border:0px" />
            	</p:commandLink>
            </p:column>
            
		</p:dataTable>
		
		</p:panel>
	
		<p:confirmDialog id="confirm" message="Tem certeza que deseja excluir o banco?" header="Excluir Banco" severity="alert" appendToBody="true" widgetVar="confirmation">
			<p:commandButton id="sim" value="SIM" action="#{bancoManager.excluir}" update="banco" oncomplete="confirmation.hide()" process="@this"/>
			<p:commandButton id="nao" value="NÃO" onclick="confirmation.hide()"/>
		</p:confirmDialog>
	
		<p:confirmDialog message="O Saldo Inicial não poderá ser alterado depois de cadastrado! Deseja cadastrar com esse Saldo Inicial?" header="Confirmar Saldo Inicial" severity="alert" widgetVar="confirmationCadastro" appendToBody="true">
			<p:commandButton id="simcadastro" value="SIM" update="banco" oncomplete="confirmationCadastro.hide()" action="#{bancoManager.cadastrar}" />  
       		<p:commandButton id="naocadastro" value="Vou checar" onclick="confirmationCadastro.hide()" type="button" />   
		</p:confirmDialog>
	</h:form>
  </ui:define>
</ui:composition>

alguem? vlw

4 Respostas

A

Retira o confirmDialog desse form, e coloca um form dentro dele, assim você pode continuar usando appendToBody = true:

<h:form> 
          <!-- aqui o form original -->
        </h:form> 


        <p:confirmDialog id="confirm" message="Tem certeza que deseja excluir o banco?" header="Excluir Banco" severity="alert" appendToBody="true" widgetVar="confirmation">  
             <h:form>
                  <p:commandButton id="sim" value="SIM" action="#{bancoManager.excluir}" update="banco" oncomplete="confirmation.hide()" process="@this"/>  
                  <p:commandButton id="nao" value="NÃO" onclick="confirmation.hide()"/>  
             </h:form>
        </p:confirmDialog>  
      
        <p:confirmDialog message="O Saldo Inicial não poderá ser alterado depois de cadastrado! Deseja cadastrar com esse Saldo Inicial?" header="Confirmar Saldo Inicial" severity="alert" widgetVar="confirmationCadastro" appendToBody="true">  

            <h:form>
                   <p:commandButton id="simcadastro" value="SIM" update="banco" oncomplete="confirmationCadastro.hide()" action="#{bancoManager.cadastrar}" />    
                  <p:commandButton id="naocadastro" value="Vou checar" onclick="confirmationCadastro.hide()" type="button" />
             </h:form>     
        </p:confirmDialog>

É uma boa prática deixar dialogs/confirmDialogs não sendo encobridos por form e sim com forms internos a ele

D

Campeão funcionou legal, o unico problema que eu tenho agora é o seguinte
no form principal tenho uns campos required=“true” e nao esta validando agora
tipo se eu preencho cadastra de boa, se nao preencho, nao cadastra mas tbm as msgs
nao aparecem

sabe o motivo?

vlw

A

Deve tá faltando dá update no form principal para exibir as mensagens.

D

eu coloquei para atualizar ele
as caixas de texto ficaram vermelhas, mas as mensagens nao apareceram

<p:message for=“nomeCaixa” />

mais alguma ideia

Criado 9 de outubro de 2012
Ultima resposta 9 de out. de 2012
Respostas 4
Participantes 2