[RESOLVIDO] Primefaces = botão não está chamando o método do Bean

Oi pessoal, outra duvida aqui.

Quando eu estava fazendo o projeto web sem usar primefaces, um determinado botão chamava o método do bean, mas agora que passei pra primefaces
o botão simplesmente parou de funcionar…

Botão: Cadastrar
Método: #{concessionariaMB.inserir}

cadastroConcessionaria.xhtml

<h:body>
	<center>
	<h:form id="formCadastroConcessionaria">
		<p:panel id="panelConcessionaria" header="Cadastro da Concessionária"
			style="width:450px;height:500px" align="center">
			
			<p:messages id="messages" autoUpdate="true" closable="true" />
	
			<p:panelGrid style="text-align: center">
	
				<p:row>
					<p:column>
						<h:outputLabel value="Código empresa: " for="codConcessionaria"
							 style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="codConcessionaria"
							value="#{concessionariaMB.concessionaria.codConcessionaria}"
							 size="20" required="true"
							label="Código da Empresa">
							<f:validateLength minimum="2" />
						</p:inputText>
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Nome da empresa: " for="nomeConcessionaria" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="nomeConcessionaria"
							value="#{concessionariaMB.concessionaria.nomeConcessionaria}"
							 size="20" required="true"
							label="Nome da empresa" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="CNPJ: " for="cnpj" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="cnpj"
							value="#{concessionariaMB.concessionaria.cnpj}" 
							size="20" required="true" label="cnpj" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Endereço: " for="endereco" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="endereco"
							value="#{concessionariaMB.concessionaria.endereco}"
							 size="20" required="true" label="Endereco" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Bairro: " for="bairro" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="bairro"
							value="#{concessionariaMB.concessionaria.bairro}"
							styleClass="edit" size="20" required="true" label="Bairro" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Local Referência: " for="referencia" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="referencia"
							value="#{concessionariaMB.concessionaria.referencia}"
							 size="20" required="false" label="Referência" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Site: " for="enderecoWEB" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="enderecoWEB"
							value="#{concessionariaMB.concessionaria.enderecoWEB}"
							 size="20" required="false" label="Endereco Web" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Email: " for="email" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="email"
							value="#{concessionariaMB.concessionaria.email}" 
							size="20" required="false" label="Email" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Telefone para contato: " for="telefone" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="telefone"
							value="#{concessionariaMB.concessionaria.telefone}"
							 size="20" required="true" label="Telefone" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Telefone opcional: " for="telefone2" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="telefone2"
							value="#{concessionariaMB.concessionaria.telefone2}"
							size="20" required="false"
							label="Telefone Opcional" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column colspan="2" style="text-align: center;">
						<h:form>	
							<p:growl id="messages" />
								
								<p:commandButton id = "showDialogButton" value="Cadastrar"
									action = "#{concessionariaMB.inserir}" style="text-align:center"
									ajax="false" onclick = "confirmation.show()"/>
							
							
							<p:confirmDialog id = "confirmDialog" message = "Concluir cadastro?" header = "Processo de cadastro"
											severity = "alert" widgedVar = "confirmation">
								
								<p:commandButton id = "confirm" value = "Sim" update = "messages" oncomplete = "confirmation.hide()"
										actionListener = "#{buttonBean.confirmaCadastro}"/>
								<p:commandButton id = "decline" value = "Não" onclick = "confirmation.hide()" type = "button"/>		
							
							</p:confirmDialog>					
													
								<p:commandButton value="Limpar Campos" type="reset"
									style="text-align:center" />
									
						</h:form>			
					</p:column>
				</p:row>
			</p:panelGrid>
		</p:panel>
	</h:form>
	</center>
</h:body>

</html>

ManagedBean

@ManagedBean
@ViewScoped

public class ConcessionariaMB implements Serializable{
	
	
	private static final long serialVersionUID = -5008137870351545171L;
	
	private Concessionaria concessionaria;
	private ConcessionariaDAO concessionariaDAO;
	
	public ConcessionariaMB(){
		concessionaria = new Concessionaria();
		concessionariaDAO = new ConcessionariaDAO();
	}
	
	public void inserir(){
		System.out.println("Inserido (ok): " + concessionaria.toString());
		concessionariaDAO.inserirConcessionaria( concessionaria );
	}
	
	public Concessionaria getConcessionaria(){
		return concessionaria;
	}
	
	public void setConcessionaria(Concessionaria concessionaria){
		this.concessionaria = concessionaria;
	}
}

Aproveitar o topico, meu confirm dialog tambem não esta aparecendo ;s

Desde já, agradeço!

Já aconteceu comigo do botão não funcionar aí no meu caso eu coloquei ajax=“false” …

Poise, o meu ta false e continua não funcionando

Achei que fosse a estrutura do código, sei la, tags em cantos errados, mas ja verifiquei tudo e nada…

Será que não tem algum converter ai no lugar errado?

Eu achava que o body é que deveria estar dentro do form…nao?

Não, e até nesse caso que estou fazendo que essa pagina vai estar dentro do centro de outra ao clicar em um botão, ela não precisa nem de um body. Me falaram ate pra não botar body nesses casos, de uma pagina carregar dentro de um frame de outra…

Nem precisei usar converter pra nenhuma situação aqui, todos os dados estão escrevendo corretamente.
Por exemplo, nao precisei usar converter para o meu “selectOneMenu”. Quando passei a fazer com primefaces
(não sei se tem a ver, mas funcionou) ele deixou de aparecer os “objetos” e apareceu realmente os nomes corretos da lista.

Ninguem? testei uma coisa aqui, no index ta assim:

parte codigo indexAdmin.xhtml


<p:submenu label = "Painel Concessionária">				
	<p:menuitem id = "cadastroConcessionaria" value = "Cadastrar Concessionária" action = "#{carregarPaginaMB.changePageConcessionaria(' ')}" ajax = "true" update = ":carregaConteudoCon"/>

</p:submenu>


<p:layoutUnit position="center">
		<p:panel id = "carregaConteudoCon"> 
			<ui:include src="#{carregarPaginaMB.pagina}"/>				
		</p:panel>
</p:layoutUnit>

se eu mudar essa ultima parte pra isso:

<p:layoutUnit position="center">
	<p:panel id = "carregaConteudoCon"> 
 			<ui:include src="/cadastroConcessionaria.xhtml"/>				
	</p:panel>
</p:layoutUnit>

ele funciona…e ai tem um problema, ele termina carregando sempre essa pagina como se fosse o indexAdmin, quando na verdade essa pagina “cadastroConcessionar.xhtml” não é a index…

alguem tem alguma ideia? =s
ta foda, ja tentei muita coisa diferente e nada funciona…

[quote=oldave]Oi pessoal, outra duvida aqui.

Quando eu estava fazendo o projeto web sem usar primefaces, um determinado botão chamava o método do bean, mas agora que passei pra primefaces
o botão simplesmente parou de funcionar…

Botão: Cadastrar
Método: #{concessionariaMB.inserir}

cadastroConcessionaria.xhtml

<h:body>
	<center>
	<h:form id="formCadastroConcessionaria">
		<p:panel id="panelConcessionaria" header="Cadastro da Concessionária"
			style="width:450px;height:500px" align="center">
			
			<p:messages id="messages" autoUpdate="true" closable="true" />
	
			<p:panelGrid style="text-align: center">
	
				<p:row>
					<p:column>
						<h:outputLabel value="Código empresa: " for="codConcessionaria"
							 style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="codConcessionaria"
							value="#{concessionariaMB.concessionaria.codConcessionaria}"
							 size="20" required="true"
							label="Código da Empresa">
							<f:validateLength minimum="2" />
						</p:inputText>
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Nome da empresa: " for="nomeConcessionaria" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="nomeConcessionaria"
							value="#{concessionariaMB.concessionaria.nomeConcessionaria}"
							 size="20" required="true"
							label="Nome da empresa" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="CNPJ: " for="cnpj" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="cnpj"
							value="#{concessionariaMB.concessionaria.cnpj}" 
							size="20" required="true" label="cnpj" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Endereço: " for="endereco" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="endereco"
							value="#{concessionariaMB.concessionaria.endereco}"
							 size="20" required="true" label="Endereco" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Bairro: " for="bairro" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="bairro"
							value="#{concessionariaMB.concessionaria.bairro}"
							styleClass="edit" size="20" required="true" label="Bairro" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Local Referência: " for="referencia" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="referencia"
							value="#{concessionariaMB.concessionaria.referencia}"
							 size="20" required="false" label="Referência" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Site: " for="enderecoWEB" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="enderecoWEB"
							value="#{concessionariaMB.concessionaria.enderecoWEB}"
							 size="20" required="false" label="Endereco Web" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Email: " for="email" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="email"
							value="#{concessionariaMB.concessionaria.email}" 
							size="20" required="false" label="Email" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Telefone para contato: " for="telefone" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="telefone"
							value="#{concessionariaMB.concessionaria.telefone}"
							 size="20" required="true" label="Telefone" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column>
						<h:outputLabel value="Telefone opcional: " for="telefone2" style="text-align:center" />
					</p:column>
					<p:column>
						<p:inputText id="telefone2"
							value="#{concessionariaMB.concessionaria.telefone2}"
							size="20" required="false"
							label="Telefone Opcional" />
					</p:column>
				</p:row>
	
				<p:row>
					<p:column colspan="2" style="text-align: center;">
						<h:form>	
							<p:growl id="messages" />
								
								<p:commandButton id = "showDialogButton" value="Cadastrar"
									action = "#{concessionariaMB.inserir}" style="text-align:center"
									ajax="false" onclick = "confirmation.show()"/>
							
							
							<p:confirmDialog id = "confirmDialog" message = "Concluir cadastro?" header = "Processo de cadastro"
											severity = "alert" widgedVar = "confirmation">
								
								<p:commandButton id = "confirm" value = "Sim" update = "messages" oncomplete = "confirmation.hide()"
										actionListener = "#{buttonBean.confirmaCadastro}"/>
								<p:commandButton id = "decline" value = "Não" onclick = "confirmation.hide()" type = "button"/>		
							
							</p:confirmDialog>					
													
								<p:commandButton value="Limpar Campos" type="reset"
									style="text-align:center" />
									
						</h:form>			
					</p:column>
				</p:row>
			</p:panelGrid>
		</p:panel>
	</h:form>
	</center>
</h:body>

</html>

ManagedBean

@ManagedBean
@ViewScoped

public class ConcessionariaMB implements Serializable{
	
	
	private static final long serialVersionUID = -5008137870351545171L;
	
	private Concessionaria concessionaria;
	private ConcessionariaDAO concessionariaDAO;
	
	public ConcessionariaMB(){
		concessionaria = new Concessionaria();
		concessionariaDAO = new ConcessionariaDAO();
	}
	
	public void inserir(){
		System.out.println("Inserido (ok): " + concessionaria.toString());
		concessionariaDAO.inserirConcessionaria( concessionaria );
	}
	
	public Concessionaria getConcessionaria(){
		return concessionaria;
	}
	
	public void setConcessionaria(Concessionaria concessionaria){
		this.concessionaria = concessionaria;
	}
}

Aproveitar o topico, meu confirm dialog tambem não esta aparecendo ;s

Desde já, agradeço![/quote]

Boa tarde,

uma pergunta: Você já depurou sua aplicação e verificou se ao clicar no botão é executado as linhas de código do método inserir() ?

uma dica: Use uma estrutura Try… Catch… dentro do seu método para você poder tratar os erros que venha a ocorrer. Outra coisa, você está dizendo que uma inserção foi feita antes de ela acontecer, você percebeu isso ?

public void inserir(){ System.out.println("Inserido (ok): " + concessionaria.toString()); concessionariaDAO.inserirConcessionaria( concessionaria ); }

Insira um Try… e corrija isso. Se depurou e verificou que o fluxo da operação não está caindo no método, tente colocar o <p:commandButton/> dentro do form. Se não fez a depuração para verificar isso, faça e veja o que acontece.

esse “inserido (ok)” é só uma mensagem de verificação pra ver se ta chamando o método, o que eu digo é que ele nem chega a exibir no console o “inserido (ok)” saca?

tentei botar o try catch e também não deu certo.

ele não esta entrando no método mesmo, se tivesse entrando ia aparecer no console o inserido. Não ta dando erro nenhum…só não executa…e o commandbutton ta dentro do form e mesmo assim nada…

Amigo… vc está com um form dentro de outro. Isso não pode.
Experimente arrumar essa estrutura e deve funcionar.

<h:form id="formCadastroConcessionaria">

//......
<p:column colspan="2" style="text-align: center;">  
       <h:form>    //EXPERIMENTE TIRAR ESSE FORM DAQUI, NAO TEM NECESSIDADE DE ELE ESTAR AQUI.. ou mude a estrutura, mas lembre, nunca um h:form dentro de outro
               <p:growl id="messages" />  
                                  
                 <p:commandButton id = "showDialogButton" value="Cadastrar"  
                     action = "#{concessionariaMB.inserir}" style="text-align:center"  
                         ajax="false" onclick = "confirmation.show()"/>  

//....

Qualquer coisa avise.
Abraços

bixo, na versão que eu to, eu ate ja tirei isso e continuou o mesmo problema.
Vou tentar refazer a página, pra ver se o erro foi estrutura, porque cansei de tentar ajeitar…

melhor começar do zero. Dai depois de fazer eu dou o toque aqui.

Valeu!

Outra coisa… experimente por process=@this no commandButton… e acho q vc pode tirar esse ajax=false

<p:commandButton id = "showDialogButton" value="Cadastrar" action = "#{concessionariaMB.inserir}" style="text-align:center"  ajax="false" onclick = "confirmation.show()"/> 

ah, agora fiquei na duvida se faz diferença ou não, mas na action, nao teria que ser:

action = "#{concessionariaMB.inserir()}" //parenteses

?

as vezes eu considero isso um bug, pq as vezes da erro dizendo que não achou o método dentro do ManagedBean por não ter os parenteses, e as vezes eu boto o parenteses e da erro tb…

caras, resolvi o problema

O problema era, eu tinha criado um managedBean pra chamar página por página. Digo, tinha um método de chamada para cada página.

Criei um template e com ele criado, pra entrar numa determinada página, eu não preciso mais acessar um outro managedBean, só
adicionar esse template em todas as páginas e pronto, ao inves de chamar a página por um managedBean, só boto a url.

Ola meu caro.
Tive o mesmo problema que você, não sei se já conseguiu resolver mas , se na sua tag estiver como ajax = false retire a tag que provavelmente irá funcionar.
O p:confirm precisa que a propriedade esteja como true para funcionar.

Espero ter ajudado.