[RESOLVIDO] Problema com <p:commandButton> não ta executando o método do actionListener

15 respostas
E

Boa Noite Pessoal,
Sou iniciante em Java Web estou com dificuldade em fazer um 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:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <ui:decorate template="/template.xhtml">
        <ui:define name="centro">
            <p:panel id="panel" header="Pesquisar Apartamento" style="border: 0px; background: #dddddd;" >
                <h:form><br/>
                    
                <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>
</html>

minha classe apartamentoController:

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!");
    }
}

15 Respostas

K

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.

V

troque action por actionListener.

Obs: creio que não precisa passar mais o evento como parâmetro.

M

Cara uma pergunta…o botão novo está funcionando???

[]s,

V

troque action por actionListener.

Obs: creio que não precisa passar mais o evento como parâmetro.

K

Quanta resposta repetida :smiley:

V

HAHUHUAHUA sem querer :stuck_out_tongue:

E

então pessoal, nem um dos botões está funcionando, nem o com action e nem o com actionListener :confused:
não sei o que pode ta errado, coloquei o form mas mesmo assim parece que não ta entrando o método.

K

colocou o atributo process no botao?

E

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 :confused: é como se nem chamasse meu método.

K

vc quer processar o form todo? coloque @form
alterou já o actionListener para action? ou ajustou o método para receber um evento?

E

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 :slight_smile:

E

Bom dia, eduardos

Adiciona o atributo ajax=“false” no <p:commandButton> que funciona, no primeFaces o commandButton vem com o ajax=“true” por default.

E

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.

Boa tarde everton koga,
Tentei resolver meu problema usando a tal ajax=“false” no meu botão pesquisar, mas não funcionou :confused: com essa tag parece que ele atualiza a pagina mas não aciona o método.

E

posta o código do xhtml e do controlador para eu dar uma olhada

E
Everton Koga:
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 pois eu estou usando um template.
Lá na minha pagina template.xhtml eu declarei um dentro de uma tag e tava colocando também na pagina que herdava esse template.
o problema se resolveu quando eu tirei as tags da minha pagina pesquisar.xhtml

minha pagina template.xhtml continuou do jeito que tava:

<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>

pesquisar.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <ui:decorate template="/template.xhtml">
        <ui:define name="centro">
            
                <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>
</html>

e a minha classe ControllerApartamento.java continuou do mesmo jeito também:

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!");
    }
}

Obrigado pela ajuda de vocês amigos, obrigado :)

Criado 19 de março de 2013
Ultima resposta 22 de mar. de 2013
Respostas 15
Participantes 5