<p:commandButton actionListener=""> não invoca método do manage bean

[quote=Lucas Abbatepaolo][quote=Gabriel Garcia]Boa noite a todos, estou com a seguinte situação: tenho um p:commandButton que quando clicado deve executar um método no meu managebean pelo “evento” actionListernet e também abrir um p:dialog pelo evento onclick. A questão é que quando clico no botão o método no manage bean não é acionado, somente o evento onclick. Alguém sabe o porque? Desde já agradeço pela ajuda.

Segue as linhas de código relevantes ao problema:

botão no xhtml

<p:commandButton actionListener="#{cotacaoMB.alterarFornecedor}" onclick="selecaoFornecedor.show()" type="button" image="ui-icon-plus" > <f:attribute name="tpFornecedor" value="segundo"/> </p:commandButton>

manage bean

[code]

@SessionScoped
@ManagedBean(name=“cotacaoMB”)
public class CotacaoMB {

public void alterarFornecedor(ActionEvent evt){
	String idFor = (String) evt.getComponent().getAttributes().get("tpFornecedor");
	this.setIdFornecedor(idFor);
}	

[/code][/quote]

[code]

Caros,

sei que já faz um tempinho mais passei pelo mesmo problema recentemente. A solução encontrada por mim foi diferente das postadas aqui, e isso me motivou a postar a solução.

Ei retirei o atributo “type=button”

ou seja

<p:commandButton actionListener="#{cotacaoMB.alterarFornecedor}" onclick=“selecaoFornecedor.show()” image=“ui-icon-plus” >
<f:attribute name=“tpFornecedor” value=“segundo”/>
</p:commandButton>[/code]

espero que seja util…vlw[/quote]

Vlw Lucas.
Removi o atributo “type=button” e resolveu o problema.

Galera estou com um problema parecido…

eu tenho um commandButton com um actionListener que não chama o método no meu ManagedBean…estou tentando a 1 semana e não consigo nada…colocando o immediate=“True” ele aciona o método mas retorna as variáveis NULL e se tiro o immediate ele para de chamar o método…
ps: eu tinha uma estrutura de classes ruins, ai eu fiz as alterações nas entidades só que não mexi no meu MB nem no meu XHTML. Agora não funciona mais, porém antes estava funcionando perfeitamente…

Minha Classe (a que quero trabalhar, porém tenho outras para receber os dados enviados pelo formulário xhtml)

[code]package com.accenture.entity;

public class Condicao {

private Campo campo1;
private Campo campo2;
private Operador operador;
private OperadorCondicional operadorCondicional;
private Comparar comparar;
private Valor valor1;
private Valor valor2;
private String parentese;
private String fechaParentese;


public Condicao(Campo campo1, Campo campo2, Operador operador,
		OperadorCondicional operadorCondicional, Comparar comparar,
		Valor valor1, Valor valor2, String parentese, 
		String fechaParentese) {
	this.campo1 = campo1;
	this.campo2 = campo2;
	this.operador = operador;
	this.operadorCondicional = operadorCondicional;
	this.comparar = comparar;
	this.valor1 = valor1;
	this.valor2 = valor2;
	this.parentese = parentese;
	this.fechaParentese = fechaParentese;
}
public Condicao(Campo campo1){
	this.campo1 = campo1;
}


public Condicao() {
}

public Campo getCampo1() {
	return campo1;
}

public void setCampo1(Campo campo1) {
	this.campo1 = campo1;
}

public Campo getCampo2() {
	return campo2;
}

public void setCampo2(Campo campo2) {
	this.campo2 = campo2;
}

public Operador getOperador() {
	return operador;
}

public void setOperador(Operador operador) {
	this.operador = operador;
}

public OperadorCondicional getOperadorCondicional() {
	return operadorCondicional;
}

public void setOperadorCondicional(OperadorCondicional operadorCondicional) {
	this.operadorCondicional = operadorCondicional;
}

public Comparar getComparar() {
	return comparar;
}

public void setComparar(Comparar comparar) {
	this.comparar = comparar;
}

public Valor getValor1() {
	return valor1;
}

public void setValor1(Valor valor1) {
	this.valor1 = valor1;
}

public Valor getValor2() {
	return valor2;
}

public void setValor2(Valor valor2) {
	this.valor2 = valor2;
}

public String getParentese() {
	return parentese;
}

public void setParentese(String parentese) {
	this.parentese = parentese;
}

public String getFechaParentese() {
	return fechaParentese;
}

public void setFechaParentese(String fechaParentese) {
	this.fechaParentese = fechaParentese;
}


@Override
public String toString() {
	return "Condicao [campo1=" + campo1 + ", campo2=" + campo2
			+ ", operador=" + operador + ", operadorCondicional="
			+ operadorCondicional + ", valor1=" + valor1 + ", valor2="
			+ valor2 + ", Parentese=" + parentese
			+ ", fechaParentese=" + fechaParentese+"]";
}

}
[/code]

Meu MB

[code]package com.accenture.managebeans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;
import com.accenture.entity.Amostra;
import com.accenture.entity.Campo;
import com.accenture.entity.Comparar;
import com.accenture.entity.Condicao;
import com.accenture.entity.Operador;
import com.accenture.entity.OperadorCondicional;
import com.accenture.entity.QueryNport;
import com.accenture.entity.Valor;
import com.accenture.persistence.CampoDAO;
import com.accenture.persistence.QueryNportDAO;

//Anotações para Definir o Escopo do ManagedBean
@ManagedBean(name = “mbconsultanport”)
@SessionScoped
public class MbConsultaNPort {
//Atributos do tipo lista do MB
private List condicoes;
private List cond;

//Atributos do Tipo OBJ do MB
private Condicao selectCondicao;
private Condicao condicao;
private QueryNport queryNPort; 

//Atributos do tipo DAO do MB
private QueryNportDAO dao = new QueryNportDAO();
private CampoDAO cdao = new CampoDAO();

//Atributos do Tipo OBJ do MB
private boolean inputHabilitado;
private boolean inputHabilitado2;
private Campo campo;
private Operador operador;
private OperadorCondicional opCondicional;
private Valor valor;
private Amostra amostra;
private Comparar comparar;

//Construtor do ManagedBean iniciando os atributos
public  MbConsultaNPort(){
	condicoes = new ArrayList<Condicao>();
	queryNPort = new QueryNport();
	selectCondicao = new Condicao();
	cond = new ArrayList<String>();
	condicao = new Condicao();
	inputHabilitado2 = true;
	campo = new Campo();
	valor = new Valor();
	amostra = new Amostra();
	operador = new Operador();
	opCondicional = new OperadorCondicional();
	comparar = new Comparar();

}


//Getters and Setters dos atributos criados
public Comparar getComparar() {
	return comparar;
}

public void setComparar(Comparar comparar) {
	this.comparar = comparar;
}

public Campo getCampo() {
	return campo;
}

public void setCampo(Campo campo) {
	this.campo = campo;
}

public Operador getOperador() {
	return operador;
}

public void setOperador(Operador operador) {
	this.operador = operador;
}

public OperadorCondicional getOpCondicional() {
	return opCondicional;
}

public void setOpCondicional(OperadorCondicional opCondicional) {
	this.opCondicional = opCondicional;
}

public Valor getValor() {
	return valor;
}

public void setValor(Valor valor) {
	this.valor = valor;
}

public Amostra getAmostra() {
	return amostra;
}

public void setAmostra(Amostra amostra) {
	this.amostra = amostra;
}

public List<Condicao> getCondicoes() {
	return condicoes;
}

public void setCondicoes(List<Condicao> condicoes) {
	this.condicoes = condicoes;
}

public List<String> getCond() {
	return cond;
}

public void setCond(List<String> cond) {
	this.cond = cond;
}

public Condicao getSelectCondicao() {
	return selectCondicao;
}

public void setSelectCondicao(Condicao selectCondicao) {
	this.selectCondicao = selectCondicao;
}

public Condicao getCondicao() {
	return condicao;
}

public void setCondicao(Condicao condicao) {
	this.condicao = condicao;
}

public QueryNport getQueryNPort() {
	return queryNPort;
}

public void setQueryNPort(QueryNport queryNPort) {
	this.queryNPort = queryNPort;
}

public boolean isInputHabilitado() {
	return inputHabilitado;
}

public void setInputHabilitado(boolean inputHabilitado) {
	this.inputHabilitado = inputHabilitado;
}

public boolean isInputHabilitado2() {
	return inputHabilitado2;
}

public void setInputHabilitado2(boolean inputHabilitado2) {
	this.inputHabilitado2 = inputHabilitado2;
}
//Fim dos Getters and Setters

//Método que resgata os campos do Teradata
public List<Campo> getCampos() throws Exception{
	
	List<Campo> listaCampos = new ArrayList<Campo>();
	
	try{
		//Condição que busca os resultados do Teradata e joga na variável consulta do tipo Campo
		for(Campo consulta : cdao.listarnPort()){
			listaCampos.add(consulta);
		}
	}catch(Exception e){
		e.printStackTrace();
	}
	return listaCampos;
}
//Método que cria os operadores
public List<Operador> getOperadores() throws Exception{
	
	List<Operador> listaOperador = new ArrayList<Operador>();
	
	listaOperador.add(new Operador("E"));
	listaOperador.add(new Operador("OU"));
	
	return listaOperador;
}
//Método que cria os operadores condicionais
public List<OperadorCondicional> getOperadorCondicionals() throws Exception{
	
	List<OperadorCondicional> listaOpCondicional = new ArrayList<OperadorCondicional>();
	
	listaOpCondicional.add(new OperadorCondicional("=", "Igual a"));
	listaOpCondicional.add(new OperadorCondicional("<>", "Diferente de"));
	listaOpCondicional.add(new OperadorCondicional(">", "Maior que"));
	listaOpCondicional.add(new OperadorCondicional("<", "Menor que"));
	listaOpCondicional.add(new OperadorCondicional(">=", "Maior ou igual que"));
	listaOpCondicional.add(new OperadorCondicional("<=", "Menor ou igual que"));
	listaOpCondicional.add(new OperadorCondicional("BETWEEN", "Entre"));
	listaOpCondicional.add(new OperadorCondicional("IS NULL", "Vazio"));
	listaOpCondicional.add(new OperadorCondicional("IS NOT NULL", "Não Vazio"));
	
	return listaOpCondicional;
}
//Método que cria os campos de comparação
public List<Comparar> getComparacao() throws Exception{
	
	List<Comparar> listaComparar = new ArrayList<Comparar>();
	
	listaComparar.add(new Comparar("Valor"));
	listaComparar.add(new Comparar("Campo"));
	
	return listaComparar;
}
/*Método que habilita o campo Campo do XHTML e desabilita o campo Valor do XHTML caso seja 
 * escolhido o campo Campo do comparar
 */
public void desabilitar(AjaxBehaviorEvent event){
	
	if(event.getComponent().getAttributes().get("value").toString().equalsIgnoreCase("Campo")){
		this.inputHabilitado = true;
	}else{
		this.inputHabilitado = false;
	}
}
//Método que habilita o campo Valor2 do XHTML caso seja escolhido o Entre do operadorCondicional
public void desabilitar2(AjaxBehaviorEvent event){
	
	if(event.getComponent().getAttributes().get("value").toString().equalsIgnoreCase("entre")){
		this.inputHabilitado2 = false;
	}else{
		this.inputHabilitado2 = true;
	}
}
//Método que monta as Condições e vai mostrar no dataTable Regra do XHTML
public void montar(ActionEvent e) throws Exception{
	if(condicoes == null){			
		condicoes = new ArrayList<Condicao>();
	}
	condicao.setCampo1(campo);
	condicao.setComparar(comparar);
	condicao.setOperador(operador);
	condicao.setOperadorCondicional(opCondicional);
	condicao.setValor1(valor);
	condicoes.add(condicao);

}

/*public List<QueryNport> aplicarSql(ActionEvent e) throws Exception{
	
	for(QueryNport q : dao.listadados(query)){
		listarquery.add(q);
	}
	return listarquery;
}*/

/*public void mostrarSql(ActionEvent e) throws Exception{
	cond = new ArrayList<String>();
	String abreParenteses;
	String fechaParenteses;
	String valor;
	String valor2;
	
	for(Condicao c : condicoes){
		
		abreParenteses = c.getParentese() != null ? c.getParentese() : "";
		fechaParenteses = c.getFechaParentese() != null ? c.getFechaParentese() : "";
		valor = c.getValor1() != null ? c.getValor1() : c.getCampo2();
		valor2 = c.getValor2() != null ? c.getValor2() : "";
		
		if(c.getCondicao().equals("igual a")){
			cond.add(abreParenteses + c.getCampo() + " = " + valor + " " + valor2 +
					fechaParenteses + c.getOperador());
		}
		if(c.getCondicao().equals("diferente de")){
			cond.add(abreParenteses + c.getCampo() + " != " + valor + " " + valor2 +
					fechaParenteses + c.getOperador());
		}
		if(c.getCondicao().equals("maior que")){
			cond.add(abreParenteses + c.getCampo() + " > " + valor + " " + valor2 +
					fechaParenteses + c.getOperador());
		}
		if(c.getCondicao().equals("maior ou igual que")){
			cond.add(abreParenteses + c.getCampo() + " >= " + valor + " " + valor2 +
					fechaParenteses + c.getOperador());
		}
		if(c.getCondicao().equals("menor que")){
			cond.add(abreParenteses + c.getCampo() + " < " + valor + " " + valor2 +
					fechaParenteses + c.getOperador());
		}
		if(c.getCondicao().equals("menor ou igual que")){
			cond.add(abreParenteses + c.getCampo() + " <= " + valor + " " + valor2 +
					fechaParenteses + c.getOperador());
		}
		if(c.getCondicao().equals("entre")){
			cond.add(abreParenteses+ c.getCampo() + " BETWEEN " + valor + " AND " + valor2 +
					fechaParenteses + c.getOperador());
		}
		
	}
}

//Método para adicionar parênteses no início da Condição Selecionada no dataTable
public void addParentesesCampo(ActionEvent e) { 

	if(selectCondicao != null){
		
		if(selectCondicao.getParentese() == null){
			
			condicoes.get(condicoes.indexOf(selectCondicao)).setParentese("(");
			
		}else{
			
			condicoes.get(condicoes.indexOf(selectCondicao)).setParentese(selectCondicao.getParentese() + "(");
		}
	}
} 

//Método para adicionar parênteses no fim da Condição Selecionada no dataTable
public void addParentesesValor(ActionEvent e) {  
	
	if(selectCondicao != null){
		
		if(selectCondicao.getFechaParentese() == null){
			
			condicoes.get(condicoes.indexOf(selectCondicao)).setFechaParentese(")");
			
		}else{
			
			condicoes.get(condicoes.indexOf(selectCondicao)).setFechaParentese(selectCondicao.getFechaParentese() + ")");
		}
	}	
}

//Método para remover a linha selecionada no dataTable
public void removeLinha(ActionEvent e){
	
	if(selectCondicao != null){
		condicoes.remove(condicoes.indexOf(selectCondicao));
	}
}

//Método para remover todas condições geradas no dataTable
public void limpaQuery(ActionEvent e){
	condicoes = null;
}

//Método que retirar um parênteses no início da Condição
public void tirarParenteseCampo(ActionEvent e){
	
	if(selectCondicao != null)
		
		condicoes.get(condicoes.indexOf(selectCondicao)).setParentese(selectCondicao.getParentese().substring(selectCondicao.getParentese().indexOf("(") + 1));
}

//Método que retirar um parênteses no fim da Condição
public void tirarParentesesValor(ActionEvent e) {  
	
	if(condicoes.get(condicoes.indexOf(selectCondicao)).getFechaParentese() != null){
		
		condicoes.get(condicoes.indexOf(selectCondicao)).setFechaParentese(selectCondicao.getFechaParentese().substring(0 , selectCondicao.getFechaParentese().lastIndexOf(")")));
		
	}
}*/

}
[/code]

meu XHTML

[code]<?xml version="1.0" encoding="ISO-8859-1" ?>

..::Billing Verification::..
| | | | | | | |
						</p:panel> 
						<!-- Fim do Painel onde tem os campos da condição da query -->
						<!-- Início do painel das informações do Período de execução da Query -->
						<p:panel header="Informações de Período" style="font-size:14px;" id="periodoPanel">
							<p:panelGrid styleClass="semBorda" id="gridPeriodo">
								<p:row>
									<!-- Campo Data inicial para restringir a busca no Teradata -->
									<p:column>Data Inicial:</p:column>
									<p:column>
										<p:calendar showOn="button" pattern="dd/MM/yyyy" readonlyInput="true"
													value="#{mbconsultanport.queryNPort.dataInicio}"  />   
									</p:column>
								</p:row>
								<p:row>
									<!-- Campo Data final para restringir a busca no Teradata -->
									<p:column>Data Final:</p:column>
									<p:column>
										<p:calendar showOn="button" pattern="dd/MM/yyyy" readonlyInput="true"
													value="#{mbconsultanport.queryNPort.dataFim}" />   
									</p:column>
								</p:row>
								<p:row>
									<!-- Campo Amostra para restringir a busca no Teradata -->
									<p:column>Amostra(limite:2000):</p:column>
									<p:column><p:inputText value="#{mbconsultanport.queryNPort.amostra}"/></p:column>
								</p:row>
							</p:panelGrid>
						</p:panel>
						<!-- Fim do painel das informações do Período de execução da Query -->
						<!-- Início do dataTable onde será mostrado as Condições da query -->
							<p:dataTable id="regraPanel" style="font-size:14px;" 
							value="#{mbconsultanport.condicoes}" var="q" selectionMode="single" 
							rowKey="#{q}" selection="#{mbconsultanport.selectCondicao}"
							emptyMessage="Nenhuma condição incluida.">
								<f:facet name="header">Regra</f:facet>
								<p:column><h:outputText value="#{q.parentese}"/> </p:column>
								<p:column headerText="Campo">
									<h:outputText value="#{q.campo1}"/>
								</p:column>
								<p:column headerText="Condição">
									<h:outputText value="#{q.operadorCondicional}"/>
								</p:column>
								<p:column headerText="Valor/Campo2">
									<!-- Condição para saber se o campo valor está preenchido ou não -->
									<h:outputText value="#{q.valor1 == null ? q.campo2 : q.valor1}"/>
								</p:column>
								<p:column headerText="Valor2">
									<!-- Condição para saber se o campo valor2 está preenchido ou não -->
									<h:outputText value="#{q.valor2 != null ? q.valor2 : null}"/>
								</p:column>
								<p:column><h:outputText value="#{q.fechaParentese}"/> </p:column>
								<p:column headerText="Operador">
									<h:outputText value="#{q.operador}" />
								</p:column>
							</p:dataTable>
							<!-- Fim do dataTable onde será mostrado as Condições da query -->
			        </h:panelGrid>  
			        <!-- Fim do gridPrincipal --> 
			        <!-- Início da Dialog que vai mostrar o resultado da Query após busca no Teradata -->
			        <p:dialog appendToBody="true" id="resultadosql" 
			        header="Resultado SQL" widgetVar="resultadosql" 
			        modal="true" resizable="false" draggable="false">
						<p:dataGrid var="rq" value="#{mbconsultanport}" styleClass="semBorda">
							<p:column headerText="SQL">
								<h:outputText value="#{rq}"/>
							</p:column>
						</p:dataGrid>
					</p:dialog> 
					<!-- Fim da Dialog que vai mostrar o resultado da Query após busca no Teradata -->
					<!-- Início da Dialog para Mostrar a lista no formato Query -->
					<p:dialog id="dglsql" widgetVar="dglsql" header="Mostrar SQL" 
					modal="true" resizable="false" draggable="false">
						<p:dataGrid var="q" value="#{mbconsultanport}" styleClass="semBorda">
							<p:column>
								<h:outputText value="#{q}"/>
							</p:column>
						</p:dataGrid>
					</p:dialog>
					<!-- Fim da Dialog para Mostrar a lista no formato Query -->
		        </h:form>
		    </p:tab>
		</p:tabView>	
		</div>
		<div id="rodape">
			Copyright@Desenvolvido pela Equipe Novas Soluções
		</div>
	</center>
</div> 

</h:body>

[/code]

abs

detalhe, ja alterei o p:commandButton para h:commandButton porém também não funcionou, só que eu queria conseguir com p:commandButton até por conta da visualização e dos outros botões que estão funcionando

Ochi, acho que tem alguma treta com esses botões do Prime…
Estou finalizando um projeto da facul e no decorrer dele tivemos vários problemas com esses botoes.
Eu ainda continuo com este problema e já tentei de tudo também, mas no meu caso nada resolveu.

Gente, o tópico é antigo, mas hoje, após alguns anos afastado da programação web, voltei a uma equipe de programação, fui criar um novo projeto utilizando o bom e velho PrimeFaces e, adivinha? Caí no mesmo probema de vocês… de novo! Mas logo eu me lembrei do porque o diabo do actionListener não disparava o evento. Como sei que esse é um problema ETERNO e, já salvando outros programadores que acessarem este antigo tópico, vamos dar um RESPAWN nele bem a la DESTINY! A explicação é um pouco cumprda:

O maior problema desses erros de envio de formulário é que eles são silenciosos. Ou seja, não é que não disparou o evento actionListener. Na verdade disparou, mas deu pau no meio do caminho e você nem notou, porque o botão simplesmente não faz nada. Alguém aí mencionou que se botar immediate=true, funciona. O immediate=true faz com que o processamento do JSF pule a etapa de validação dos campos, assim como ele vai pular a atribuição dos valores dos campos de formulário aos beans que você referenciou nas tags value para recebê-los. Ou seja, nenhum bean recebe valor nenhum que foi digitado pelo usuário. Por isso que funciona! Porque é justamente aí que está o pau: nos campos do teu formulário, que têm algum erro! Este simples código aqui que usei funcionou perfeitamente, veja só:

code
<p:column>
<p:selectOneMenu value="#{centralTelefonicaMB.consultaParametros.centralTelefonica1.placaIcip}" style=“width: 200px; text-align: center”>
<f:selectItem itemValue=“todos” itemLabel="----- Todos -----" />
<f:selectItem itemValue=“0” itemLabel=“Não” />
<f:selectItem itemValue=“1” itemLabel=“Sim” />
</p:selectOneMenu>
</p:column>
</p:row>
</p:panelGrid>
<p:commandButton actionListener="#{centralTelefonicaMB.geraConsultaCustomizada()}" value=“Gerar Relatório” style=“margin-top: 20px” />
</p:outputPanel> [/code]

E no managed bean:

public final void geraConsultaCustomizada(){
        if(consultaTipo.equals("consultaCentral")){
            this.consultaTipoExtenso = consultaCentral;
            this.consulta = CentralTelefonicaDAO.geraConsultaCustomizadaCentral(consultaTipo, consultaParametros);
        }
        RequestContext rc = RequestContext.getCurrentInstance();
        rc.execute("consultaDialog.show()");
        rc.update("f3"); 
    }

Observe que não precisei de ActionEvent, immediate=true, ajax=false, tirar ou colocar parênteses no método do listener, usar h:commandButton, trocar actionListener por action, nada disso!
O que pode ter gerado erro no código de vocês é:

1 - Uma coisa que temos sempre que ter em mente é que o campo retornado de um formulário precisa ser, NECESSARIAMENTE, um String. Portanto, se você colocou na tag value de algum campo do formulário um atributo int do teu bean recebendo aquele campo, vai dar pau. Se o dado que vai entrar pelo formulário é um número, coloque um atributo String no teu bean e depois converta lá no teu Managed Bean, por exemplo, assim:

bean1.campo1 = Integer.parseInt(bean1.campo1Str); - Onde campo1 é o int que será guardado no bean e campo1Str é a variável temporária que guardará o String que vem do formulário. Coloque na cabeça: valor que vem do formulário é sempre String. Portanto, o atributo do bean que recebe aquele valor tem que ser String também.

2 - Um erro clássico que dá pau em envio de formulário é esquecer de instanciar os campos do formulário na inicialização do bean. Por exemplo: se o inputText tem seu value="#{managedBean.objeto1.campo1"}", mas o objeto1 não foi instanciado no managed bean antes de você clicar no submit do formulário, vai rolar null pointer exception. Porque a primeira coisa que o JSF faz quando você submete o formulário é mandar um managedBean.getObjeto1(). Aí dá pau. No meu caso, dava pau porque havia um objeto dentro do outro. Meu Managed Bean tinha um objeto consultaParametros, e este, por sua vez tinha um objeto do tipo CentralTelefonica nele. Eu instanciei o consultaParametros, mas não instanciei o objeto centralTelefonica. Aí, quando JSF tentou acessar o objeto, deu o maldito null pointer exception.

A solução mais simples para se inicializar atributos que receberão dados do formulário é no próprio método get do atributo, lá no ManagedBean:
Ao invés de:

[code]publicpublic TuplaRelatorio getConsultaParametros() {

    return consultaParametros;
}[/code]

Coloque:

[code]publicpublic TuplaRelatorio getConsultaParametros() {
if(this.consultaParametros == null)
consultaParametros = new TuplaRelatorio();

    return consultaParametros;
}[/code]

Estou com este mesmo problema com <p:commandButton. Já tentei de tudo.

Boa noite guys, espero que essa resposta consiga resolver os futuros programadores em relação a isso:
Ja testei de tudo tambem e somente assim assim resolveu.

  • Adicione antes das dependências no pom.xml:
    < repositories>
    < repository>
    < id>prime-repo< /id>
    < name>PrimeFaces Maven Repository< /name>
    < url>http://repository.primefaces.org< /url>
    < layout>default< /layout>
    < /repository>
    < /repositories>

  • Na dependência do primefaces atualize a versão dele. Antes a minha versão era 2.1.10, atualizei para 2.2.10 e funcionou o <p:commandButton>

    < dependency>
    < groupId>org.glassfish< /groupId>
    < artifactId>javax.faces< /artifactId>
    < version>2.2.10< /version>
    < /dependency>

Boa noite guys, espero que essa resposta consiga resolver os futuros programadores em relação a isso:
Ja testei de tudo tambem e somente assim assim resolveu.

  • Adicione antes das dependências no pom.xml:
    < repositories>
    < repository>
    < id>prime-repo< /id>
    < name>PrimeFaces Maven Repository< /name>
    < url>http://repository.primefaces.org< /url>
    < layout>default< /layout>
    < /repository>
    < /repositories>
  • Na dependência do primefaces atualize a versão dele. Antes a minha versão era 2.1.10, atualizei para 2.2.10 e funcionou o <p:commandButton>< dependency>
    < groupId>org.glassfish< /groupId>
    < artifactId>javax.faces< /artifactId>
    < version>2.2.10< /version>
    < /dependency>