Boa Noite Pessoal,
Sou iniciante em Java Web estou com dificuldade em fazer um <p:commandButton> executar um método que está na minha classe controller.
Nos métodos dos botões eu coloquei apenas para imprimir qualquer coisa, a intenção era pra ver se o botão tava excutando o metodo, porém ele não imprime nada.
se alguem poder ajudar desde ja, agradeço
minha pagina pesquisar.xhtm:
[code]<?xml version="1.0" encoding="UTF-8"?>
<h:panelGrid columns="3">
<h:outputLabel for="numero" value="Número"/>
<p:inputText size="20" id="numero" value="" label="numero"/>
<p:commandButton value="Pesquisar" id="pesquisar" action="#{apartamentoController.pesquisarApartamento()}"/>
</h:panelGrid><br/>
<p:dataTable var="apartamento" value="#{apartamentoController.listarApartamentos}">
<p:column headerText="Número">
<h:outputText value="#{apartamento.numero}" />
</p:column>
<p:column headerText="Descrição">
<h:outputText value="#{apartamento.descricao}" />
</p:column>
<p:column headerText="Status">
<h:outputText value="#{apartamento.statusApartanto}" />
</p:column>
<p:column headerText="Ação">
<h:outputText value="" />
</p:column>
</p:dataTable>
<br/>
<p:commandButton value="Novo" actionListener="#{apartamentoController.novo()}"/>
<h:panelGrid>
</h:panelGrid>
</h:form>
</p:panel>
</ui:define>
</ui:decorate>
[/code]
minha classe apartamentoController:
[code]package br.com.sgh.controller;
import br.com.sgh.dao.ApartamentoDao;
import br.com.sgh.dao.ApartamentoDaoImp;
import br.com.sgh.model.Apartamento;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
@ManagedBean
@SessionScoped
public class ApartamentoController {
private Apartamento apartamento;
private DataModel listaApartamentos;
public DataModel getListarApartamentos() {
List<Apartamento> lista = new ApartamentoDaoImp().list();
listaApartamentos = new ListDataModel(lista);
return listaApartamentos;
}
public Apartamento getApartamento() {
return apartamento;
}
public void setApartamento(Apartamento apartamento) {
this.apartamento = apartamento;
}
public String prepararAdicionarApartamento() {
apartamento = new Apartamento();
return "gerenciarApartamento";
}
public String prepararAlterarApartamento() {
apartamento = (Apartamento) (listaApartamentos.getRowData());
return "gerenciarApartamento";
}
public String excluirApartamento() {
Apartamento apartamentoTemp = (Apartamento) (listaApartamentos.getRowData());
ApartamentoDao dao = new ApartamentoDaoImp();
dao.remove(apartamentoTemp);
return "index";
}
public String adicionarApartamento() {
ApartamentoDao dao = new ApartamentoDaoImp();
dao.save(apartamento);
return "index";
}
public String alterarApartamento() {
ApartamentoDao dao = new ApartamentoDaoImp();
dao.update(apartamento);
return "index";
}
public void pesquisarApartamento(){
System.out.println("Acionou o botão pesquisar!");
}
public void novo(){
System.out.println("Acionou!");
}
}[/code]
dica rapida, qndo vc for utilizar actionListener
seu metodo tem que receber o parametro ActionEvent,
se não for utilizar, não use actionListener use o somente o action. Segundo ponto é colocar o que deseja processar com o atributo “process” com alguns valores possiveis, como @this @form @all @none @parent.
troque action por actionListener.
Obs: creio que não precisa passar mais o evento como parâmetro.
Cara uma pergunta…o botão novo está funcionando???
[]s,
troque action por actionListener.
Obs: creio que não precisa passar mais o evento como parâmetro.
então pessoal, nem um dos botões está funcionando, nem o com action e nem o com actionListener 
não sei o que pode ta errado, coloquei o form mas mesmo assim parece que não ta entrando o método.
colocou o atributo process no botao?
coloquei o atributo <p:commandButton value="Novo" process="@parent" action="#{apartamentoController.novo()}"/>
com todos os parâmetros que você mencionou acima, mas mesmo assim não ta funcionando
é como se nem chamasse meu método.
vc quer processar o form todo? coloque @form
alterou já o actionListener para action? ou ajustou o método para receber um evento?
Consegui fazer o botão novo acionar o método, coloquei o <h:commandButton> com o atributo process="@this" fora do <p:panel>, mas o botão pesquisar ainda não ta acionando o método, ele só funciona se eu fizer a mesma coisa do botão novo, porém se eu tentar fazer desse jeito vou bagunçar a minha pagina, alguém tem ideia de como eu devo fazer para funcionar? valeu 
Bom dia, eduardos
Adiciona o atributo ajax=“false” no <p:commandButton> que funciona, no primeFaces o commandButton vem com o ajax=“true” por default.
[quote=Everton Koga]Bom dia, eduardos
Adiciona o atributo ajax=“false” no <p:commandButton> que funciona, no primeFaces o commandButton vem com o ajax=“true” por default.[/quote]
Boa tarde everton koga,
Tentei resolver meu problema usando a tal ajax=“false” no meu botão pesquisar, mas não funcionou
com essa tag parece que ele atualiza a pagina mas não aciona o método.
posta o código do xhtml e do controlador para eu dar uma olhada
Boa Tarde, consegui resolver esse problema, hoje mais cedo pesquisando no trabalho, descobri esse problema tava relacionado ao <h:form> pois eu estou usando um template.
Lá na minha pagina template.xhtml eu declarei um <p:layoutUnit > dentro de uma tag <h:form> e tava colocando também na pagina que herdava esse template.
o problema se resolveu quando eu tirei as tags <h:form> da minha pagina pesquisar.xhtml
minha pagina template.xhtml continuou do jeito que tava:
[code]<h:form>
<p:layoutUnit position=“center” style="border: 0; ">
<ui:insert name="centro" >
O que estiver aqui será substituido!
</ui:insert>
</p:layoutUnit>
</h:form>[/code]
pesquisar.xhtml:
[code]<?xml version="1.0" encoding="UTF-8"?>
<br/>
<p:panel id="panel" header="Pesquisar Apartamento" style="border: 0px; background: #dddddd;" >
<h:panelGrid columns="3">
<h:outputLabel for="numero" value="Número"/>
<!--<p:inputText size="20" id="numero" value="" label="numero"/>-->
<p:commandButton value="Pesquisar" actionListener="#{apartamentoController.pesquisarApartamento()}"/>
</h:panelGrid><br/>
<p:dataTable var="apartamento" value="#{apartamentoController.listarApartamentos}">
<p:column headerText="Número">
<h:outputText value="#{apartamento.numero}" />
</p:column>
<p:column headerText="Descrição">
<h:outputText value="#{apartamento.descricao}" />
</p:column>
<p:column headerText="Status">
<center>
<h:outputText value="#{apartamento.statusApartanto ? 'Ocupado': 'Livre'}" />
</center>
</p:column>
<p:column headerText="Ação">
<h:outputText value="" />
</p:column>
</p:dataTable>
<br/>
</p:panel>
<p:commandButton value="Novo" process="@this" actionListener="#{apartamentoController.novo()}"/>
</ui:define>
</ui:decorate>
[/code]
e a minha classe ControllerApartamento.java continuou do mesmo jeito também:
[code]package br.com.sgh.controller;
import br.com.sgh.dao.ApartamentoDao;
import br.com.sgh.dao.ApartamentoDaoImp;
import br.com.sgh.model.Apartamento;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.swing.JOptionPane;
@ManagedBean
@SessionScoped
public class ApartamentoController{
private Apartamento apartamento;
private DataModel listaApartamentos;
public DataModel getListarApartamentos() {
List<Apartamento> lista = new ApartamentoDaoImp().list();
listaApartamentos = new ListDataModel(lista);
return listaApartamentos;
}
public Apartamento getApartamento() {
return apartamento;
}
public void setApartamento(Apartamento apartamento) {
this.apartamento = apartamento;
}
public String prepararAdicionarApartamento() {
apartamento = new Apartamento();
return "gerenciarApartamento";
}
public String prepararAlterarApartamento() {
apartamento = (Apartamento) (listaApartamentos.getRowData());
return "gerenciarApartamento";
}
public String excluirApartamento() {
Apartamento apartamentoTemp = (Apartamento) (listaApartamentos.getRowData());
ApartamentoDao dao = new ApartamentoDaoImp();
dao.remove(apartamentoTemp);
return "index";
}
public String adicionarApartamento() {
ApartamentoDao dao = new ApartamentoDaoImp();
dao.save(apartamento);
return "index";
}
public String alterarApartamento() {
ApartamentoDao dao = new ApartamentoDaoImp();
dao.update(apartamento);
return "index";
}
public void pesquisarApartamento(){
System.out.println("Acionou o botão pesquisar!");
}
public void novo(){
System.out.println("######Acionou!");
}
}
[/code]
Obrigado pela ajuda de vocês amigos, obrigado 