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

27 respostas
G

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

@SessionScoped
@ManagedBean(name="cotacaoMB")
public class CotacaoMB {
	
	public void alterarFornecedor(ActionEvent evt){
		String idFor = (String) evt.getComponent().getAttributes().get("tpFornecedor");
		this.setIdFornecedor(idFor);
	}

27 Respostas

V

Boa noite Gabriel!

Acho que posso te ajudar com algumas dicas:

  1. Já verificou se o p:commandButton está dentro de um <h:form>? Acho que precisa estar pra funcionar corretamente.

  2. O p:commandButton do PrimeFaces vem por padrão com o atributo “ajax=true”, ou seja, você deveria utilizá-lo para realizar alguma funcionalidade do ajax, como renderizar componentes, etc. Você pode setar o atributo ajax=false se quiser utilizar algum processamento sem ser ajax, por exemplo, para acessar dados de um bean ou mesmo fazer a navegação forward. O própria FAQ do PrimeFaces já alerta quanto a navegação: http://www.primefaces.org/faq.html

  3. Já tentou usar o <f:param> no lugar do <f:attribute>?

Outra idéia seria (acredito que vc já tenha feito…) colocar um breakpoint no início de seu método e verificar se ao clicar no botão o método é acionado, pois se for, então o problema está no método e não na view.

Espero ter ajudado.

Até +!

G

Boa notie vinnysoft, primeiramente obrigado pelas dicas. Respondendo as mesmas, o commandbutton está sim dentro de um h:form, vou esperiemntar criar um somente para o botão e ver o que acontece! Testei tbm setando a propriedade ajax=“false” porém o resultado foi o mesmo e o f:param segundo um outro tópico que pesquisei é utilizado para commandLink, não tenho certeza mas eles disseram isto. E eu estou monitorando sim pelo breakpoint, até mudei os botões para h:commandButton para ver o que acontece e o método foi acionado normalmente, o problema é que o h:commandButton da um submit na página, preciso impedir este submit mas ainda não sei como hehe

V

Olá Gabriel!

Tem como vc colocar todo o código da view para entender melhor o contexto?

V

Ah,

outra ideia que tive seria vc utilizar o action do p:commandButton ao invés de actionListener… Não me lembro onde li, mas me parece que um é para quando o retorno é void e o outro é para quando o retorno é uma String, ai já executaria a navegação.

Até +!

G

sem problemas

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition 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:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.prime.com.tr/ui">
	
	<ui:composition template="/paginas/principais/principal.xhtml">	
		<ui:define name="conteudo">
			<!-- INÍCIO DO FORM DE COTAÇÃO -->
			<h:form id="formCotacao">
				<p:outputPanel id="painelNovaCotacao">
					<p:messages id="menssagens"/>
					<p:dialog id="dialogo" header="Aguarde..." modal="true" widgetVar="saveDialog" closable="false" height="100" width="60" 
						resizable="false" appendToBody="true">
							<p:ajaxStatus style="width:16px;height:16px; position: center;">
								<f:facet name="start">
									<h:graphicImage value="/imagens/loading.gif" style="position: center;"/>
								</f:facet>					
							</p:ajaxStatus>
					</p:dialog>		
					<p:panel id="painelCotacao">
						<p:fieldset legend="Cotação">
							<h:panelGrid columns="3" cellpadding="2">
								<h:outputLabel value="Cliente"/>
								<h:outputLabel value=""/>
								<h:outputLabel value="Data"/>
								<p:inputText id="idCliente" value="#{cotacaoMB.cotacao.cliente.pessoa.nome}" readonly="true" />
								<p:commandButton onclick="selecaoCliente.show()" type="button" image="ui-icon-circle-plus"/>
								<p:calendar id="idData" value="#{cotacaoMB.cotacao.dtCotacao}" navigator="true" pattern="dd/MM/yyyy" required="true" requiredMessage="Data é obrigatório!" showOn="button"/>
							</h:panelGrid>	
						</p:fieldset>
						<p:fieldset legend="Pedido 1">		
							<h:panelGrid columns="7" cellpadding="2">
								<h:outputLabel value="Fornecedor"/>
								<h:outputLabel value=""/>
								<h:outputLabel value="Produto"/>
								<h:outputLabel value="Valor"/>
								<h:outputLabel value="Quantidade"/>
								<h:outputLabel value="Frete"/>						
								<h:outputLabel value="Total"/>
								<p:inputText id="idFornecedor" value="#{cotacaoMB.primeiroFornecedor}" readonly="true"/>				
								<p:commandButton actionListener="#{cotacaoMB.alterarFornecedor}" onclick="selecaoFornecedor.show()" type="button" image="ui-icon-circle-plus">
									<f:attribute name="tpFornecedor" value="primeiro"/>
								</p:commandButton>																	
								<p:inputText id="idProduto" value="#{cotacaoMB.cotacao.produto1}" required="true" requiredMessage="Produto em Pedido 1 é obrigatório!"/>
								<p:inputMask id="idValor" value="#{cotacaoMB.cotacao.valorProduto1}" mask="999999990,?00" dir="RTL" required="true" requiredMessage="Valor do produto em Pedido 1 é obrigatório!"/>
								<p:inputMask id="idQuantidade" value="#{cotacaoMB.cotacao.quantidade1}" mask="999999990,?00" dir="LTR" required="true" requiredMessage=" Quantidade em Pedido 1 é obrigatório!"/>
								<p:inputMask id="idFrete" value="#{cotacaoMB.cotacao.valorFrete}" mask="[telefone removido],?00" dir="LTR" required="true" requiredMessage="Valor do frete em Pedido 1 é obrigatório!"/>
								<p:inputMask id="idTotal" value="#{cotacaoMB.cotacao.totalPedido}" mask="999999990,?00" dir="LTR" readonly="true"/>						
							</h:panelGrid>	
						</p:fieldset>
						<p:fieldset legend="Pedido 2">	
							<h:panelGrid columns="7" cellpadding="2">
								<h:outputLabel value="Fornecedor"/>
								<h:outputLabel value=""/>
								<h:outputLabel value="Produto"/>
								<h:outputLabel value="Valor"/>
								<h:outputLabel value="Quantidade"/>
								<h:outputLabel value="Frete"/>
								<h:outputLabel value="Total"/>
								<p:inputText id="idFornecedor2" value="#{cotacaoMB.segundoFornecedor}" readonly="true"/>
								<p:commandButton actionListener="#{cotacaoMB.alterarFornecedor}" onclick="selecaoFornecedor.show()" type="button" image="ui-icon-circle-plus" >
									<f:attribute name="tpFornecedor" value="segundo"/>
								</p:commandButton>	
								<p:inputText id="idProduto2" value="#{cotacaoMB.cotacao.produto2}" />
								<p:inputMask id="idValor2" value="#{cotacaoMB.cotacao.valorProduto2}" mask="999999990,?00" dir="RTL"/>
								<p:inputMask id="idQuantidade2" value="#{cotacaoMB.cotacao.quantidade2}" mask="999999990,?00" dir="LTR"/>
								<p:inputMask id="idFrete2" value="#{cotacaoMB.cotacao.valorFrete2}" mask="999999990,?00" dir="LTR"/>
								<p:inputMask id="idTotal2" value="#{cotacaoMB.cotacao.totalPedido2}" mask="999999990,?00" dir="RLT"/>						
							</h:panelGrid>
						</p:fieldset>
						<h:panelGrid columns="2" cellpadding="2">
							<p:commandButton id="btGravar" value="Salvar" actionListener="#{cotacaoMB.gravar}" update="menssagens" onclick="saveDialog.show()" oncomplete="saveDialog.hide()" image="ui-icon ui-icon-disk"/>							
							<p:commandButton id="btNovo" value="Novo" type="reset" actionListener="#{cotacaoMB.limparTudo}" immediate="true" update="mensagens" image="ui-icon ui-icon-refresh"/>										
						</h:panelGrid>	
					</p:panel>	
				</p:outputPanel>
			</h:form><!-- /formNovaCotacao -->
			<!-- FORM DIALOGS -->
			<h:form>
				<!-- DIALOG PARA SELEÇÃO DE CLIENTE -->						
				<p:dialog id="selecaoClienteDialog" header="Seleção de cliente" widgetVar="selecaoCliente" height="470" width="1200" 
					draggable="true" resizable="false" >					
					<p:panel id="painelBuscarCliente" header="Buscar por" toggleable="true" >		
				  		<p:dialog id="dialogo2" header="Aguarde..." modal="true" widgetVar="saveDialog" closable="false" height="100" width="60" 
							resizable="false" appendToBody="true" styleClass="loadDialog" >								
							<p:ajaxStatus style="width:16px;height:16px; position: center;">
								<f:facet name="start">
									<h:graphicImage value="/imagens/loading.gif" style="position: center;"/>
								</f:facet>					
							</p:ajaxStatus>								
						</p:dialog>				
						<p:messages id="msgPesquisa"/>
						<h:panelGrid columns="5" cellpadding="2">
							<h:outputLabel value="Nome: "/>
							<h:outputLabel value="CPF/CNPJ: "/>
							<h:outputLabel value="Logradouro: "/>
							<h:outputLabel value="Cidade: "/>
							<h:outputLabel value=""/>
							<p:inputText id="nmClienteArg" maxlength="50" size="35" value="#{cotacaoMB.nomeClienteArg}"/>							
							<p:inputText id="ccClienteArg" maxlength="20" size="20" value="#{cotacaoMB.cpfCnpjClienteArg}" converterMessage="Informe somente números no campo CPF/CNPJ!"/>
						  	<p:inputText id="logClienteArg" maxlength="50" size="35" value="#{cotacaoMB.logradouroClienteArg}"/>
							<p:inputText id="cidClienteArg" maxlength="35" size="25" value="#{cotacaoMB.cidadeClienteArg}"/>
							<p:commandButton id="btPesquisarCli" value="Pesquisar" image="ui-icon ui-icon-search"  actionListener="#{cotacaoMB.pesquisarCliente}" update="listarClientes, msgPesquisa" 
								onclick="saveDialog.show()" oncomplete="saveDialog.hide()" />
						</h:panelGrid>										
					</p:panel><!-- /painelBusca -->					
					<p:dataTable id="listarClientes" var="cliente" value="#{cotacaoMB.listaClientes}" paginator="true" rows="7" emptyMessage=" ">
						<f:facet name="header">
							Lista de clientes cadastrados
						</f:facet>
						<p:column headerText="Nome">
							<h:outputText value="#{cliente.pessoa.nome}"/>
						</p:column>					
						<p:column headerText="CPF/CNPJ">						
							<h:outputText value="#{cliente.pessoa.cpfCnpjFormatado}"/>
						</p:column>
						<p:column headerText="Logradouro">						
							<h:outputText value="#{cliente.pessoa.logradouro}"/>
						</p:column>
						<p:column headerText="Cidade">						
							<h:outputText value="#{cliente.pessoa.cidade}"/>
						</p:column>						
					    <p:column headerText="Selecione" style="width:32px">
					       <p:commandButton image="ui-icon ui-icon-pencil" onclick="selecaoCliente.hide()" update="formCotacao">
					           <f:setPropertyActionListener value="#{cliente}" target="#{cotacaoMB.cotacao.cliente}" />
					        </p:commandButton>
						</p:column>				         
					</p:dataTable><!-- /listaClientes -->			
				</p:dialog><!-- /DIALOG PARA SELEÇÃO DE CLIENTE -->
				<!-- DIALOG PARA SELEÇÃO DE FORNECEDOR -->						
				<p:dialog id="selecaoFornecedorDialog" header="Seleção de fornecedor" widgetVar="selecaoFornecedor" height="470" width="1200" 
					draggable="true" resizable="false" >					
					<p:panel id="painelBuscarFornecedor" header="Buscar por" toggleable="true">		
			  			<p:dialog id="dialogo" header="Aguarde..." modal="true" widgetVar="saveDialog" closable="false" height="100" width="60" 
							resizable="false" styleClass="loadDialog" appendToBody="true">
								<p:ajaxStatus style="width:16px;height:16px; position: center;">
									<f:facet name="start">
										<h:graphicImage value="/imagens/loading.gif" />
									</f:facet>					
								</p:ajaxStatus>
						</p:dialog>				
						<p:messages id="msgPesquisa2"/>
						<h:panelGrid columns="4" cellpadding="2">
							<h:outputLabel value="Nome: "/>
							<h:outputLabel value="CPF/CNPJ: "/>
							<h:outputLabel value="Atividade: "/>
							<h:outputLabel value=""/>
							<p:inputText id="nmForArg" maxlength="50" size="35" value="#{cotacaoMB.nomeFornecedorArg}"/>
							<p:inputText id="cpfCnpjForArg" maxlength="20" size="20" value="#{cotacaoMB.cpfCnpjFornecedorArg}" converterMessage=" "/>
						  	<h:selectOneMenu value="#{cotacaoMB.atividade}">
								<f:selectItems value="#{cotacaoMB.atividades}" var="atv" noSelectionValue="Selecione" itemLabel="#{atv.descricao}" />
								<f:converter converterId="cvtAtividade"/>
							</h:selectOneMenu>
							<p:commandButton value="Pesquisar" image="ui-icon ui-icon-search" id="btPesquisarFor" actionListener="#{cotacaoMB.pesquisarFornecedor}" update="listarFornecedores msgPesquisa2" 
								onclick="saveDialog.show()" oncomplete="saveDialog.hide()"/>
						</h:panelGrid>										
					</p:panel><!-- /painelBusca -->
					<p:dataTable id="listarFornecedores" var="fornecedor" value="#{cotacaoMB.listaFornecedores}" paginator="true" rows="7" emptyMessage=" ">
						<f:facet name="header">
							Lista de fornecedores cadastrados
						</f:facet>
						<p:column headerText="Nome">
							<h:outputText value="#{fornecedor.pessoa.nome}"/>
						</p:column>					
						<p:column headerText="CPF/CNPJ">						
							<h:outputText value="#{fornecedor.pessoa.cpfCnpjFormatado}"/>
						</p:column>
						<p:column headerText="Atividade">						
							<h:outputText value="#{fornecedor.atividade.descricao}"/>
						</p:column>
						<p:column headerText="Cidade">						
							<h:outputText value="#{fornecedor.pessoa.cidade}"/>
						</p:column>						
				        <p:column headerText="Editar" style="width:32px">
				            <p:commandButton image="ui-icon ui-icon-pencil" action="#{cotacaoMB.adicionarFornecedor}" onclick="selecaoFornecedor.hide()" update="formCotacao">
				                <f:setPropertyActionListener value="#{fornecedor}" target="#{cotacaoMB.fornecedorSelecionado}" />
				            </p:commandButton>
				        </p:column>				         
					</p:dataTable><!-- /listaFornecedores -->
				</p:dialog><!-- /DIALOG PARA SELEÇÃO DE FORNECEDOR -->					
			</h:form><!-- /FORM DIALOGS -->		
		</ui:define>
	</ui:composition>
</html>
G

Sim, o action deve ser utilizado quando tem navegação de página, como não estou fazendo navegação entre páginas estou usando o actionListener

V

Olá Gabriel!

Minhas idéias estão acabando! kkk

Outra pergunta:

  1. Você está precisando que o botão executa paralelamente as duas funções: o onClick e o action? Não sei se dar pra fazer isso…

  2. Os outros p:commandButtons que possuem os dois atributos setados estão funcionando?

Até +!

V

Você já deu uma olhada no ShowCase do PrimeFaces?

Tem um exemplo que ele usa o onClick e o actionListener: http://www.primefaces.org/showcase/ui/watermark.jsf

<p:commandButton actionListener="#{watermarkBean.search}" value="Ajax"  
            onclick="PrimeFaces.cleanWatermarks();" oncomplete="PrimeFaces.showWatermarks();"  />

Já tentou usar no oncomplete pra ver se funciona?

Até +!

V

E então, algum sucesso?

G

Demorei, o tempo ta curto não tive como vir antes postar a solução que adotei, mas enfim, não consegui descobri o problema de não acessar a action e resolvi da seguinte forma: troquei o p:commandButton por h:commandButton e desabilitei o ajax para não submeter o form, conforme o código a seguir.

<f:ajax disabled="false"> <h:commandButton actionListener="#{cotacaoMB.alterarFornecedor}" onclick="selecaoFornecedor.show()" type="button" image="/imagens/add.png" > <f:attribute name="tpFornecedor" value="segundo"/> </h:commandButton> </f:ajax>

J

Essa era fácil.

Os botões do PrimeFaces tem por padrão ajax.

Então só coloca ali ajax=“false” e ta funcionando seu <p:commandButton.

Cya

G

Inicialmente tbm achei que o problema era desabilitar o ajax do p:commandButton, tanto é que foi a primeira coisa que fiz, porém não obtive sucesso, por isto usei o h:commandButton com ajax desabilitado.

J

Galera, sei que o tópico é antigo, mas outras pessoas podem se deparar com esse mesmo erro.

Aconteceu exatamente isso comigo e eu resolvi simplesmente colocando o atributo immediate=“true” no <p:commandLink/>.

Flw!

M

O tópico é antigo mais vou dar um “revive” nele como gears of war… rs

Bom eu enfrento o mesmo problema de todos ai em cima, fiz todas as sugestões dadas aqui e algumas outras.

Porém nada funcionou, o immediate funcionou parcialmente, mas eu tenho um objeto pessoa e com o immediate=true ele não atualizava o form novamente, mesmo no Managedean tendo a linha pessoa = new Pessoa(); ele exibia os valores antigos.

Alguém conseguiu uma solução definitiva???

O que mais me deixa nervoso é que em outro projeto eu tenho a mesma situação, da mesma maneira, a mesma estrutura de montagem das páginas, uso templates e inserts, e neste outro projeto tudo está funcionando, sem immediate, sem mudar o ajax do commandLink ou commandButton.

Foi humilhação rs, mas para este projeto que não estava funcionando, para fazer o que queria tive que colocar dois forms, um com os inputs e outro com os commandLinks.

O commandLink executa o método, e atualiza todos os forms corretamente, se alguém conseguiu uma solução definitiva agradeço… Porque olhando os dois projetos não consegui encontrar nenhuma diferença.

J

Tentou colocar o ManagedBean anotado com @ViewScoped?

M

Saudações.

Sim, meu ManagedBean está com o ViewScoped.
Quando coloquei um form para o botão e um form para o cadastro funciona tudo normal grava no banco e etc.
O que acho mais estranho é que no outro projeto funciona. Vou tentar trocar o jar do Prime Faces.

Estou sem o código agora, mas quando chegar em casa posto o código para o pessoal.

M

Saudações.

Resolvi o problema, não tinha nada a ver com o ManagedBean, immediate ou ajax.

O problema estava na classe de mapaeamento do Hibernate, estava faltando um método set para uma propriedade.
Para fazer um teste tinha colocado um h:commandLink e quando ele executou a função do botão ele me retornou o erro “clase does not have a writable property”, então comecei a procurar e encontrei o método set que estava faltando. :idea: :?

Vlw pela ajuda pessoal.

L
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

@SessionScoped
@ManagedBean(name="cotacaoMB")
public class CotacaoMB {
	
	public void alterarFornecedor(ActionEvent evt){
		String idFor = (String) evt.getComponent().getAttributes().get("tpFornecedor");
		this.setIdFornecedor(idFor);
	}
Caros,

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

espero que seja util...vlw

D

eu tava com problemas com um botão simples… que só precisava esconder um Dialog…

e o maldito não funcionada… tenho em outras telas o MESMO botão… com o código exatamente igual…
e nessa tela não funcionava, nem printava erro…

&lt;p:commandButton id="cancelButton" update=":dialogForm:infosImovelProp" icon="ui-icon-close" value="Cancelar" oncomplete="dialogImovelPropProp.hide()" immediate="true"/&gt;
mudei para:

&lt;p:commandButton id="cancelButton" update=":dialogForm:infosImovelProp" icon="ui-icon-close" value="Cancelar" onclick="dialogImovelPropProp.hide()" immediate="true"/&gt;
onCONPLETE para onCLICK e funcionou… agora… se vc precisa realmente enviar as infos do form
eu tenho o seguinte botão…:

&lt;p:commandButton id="createButton" update=":tabelaForm, :dialogForm:infosImovelProp" value="Adicionar" icon="ui-icon-disk" oncomplete="if(!args.validationFailed){dialogImovelProp.hide();}" rendered="#{empty imovelPropController.imovelProp.id}" actionListener="#{imovelPropController.adicionarImovelProp}"/&gt;
talvez pegando como base ai nos meus botões … talvez vcs consigam algo… o/*

public void adicionarImovelProp(ActionEvent actionEvent){...}
A
Lucas Abbatepaolo:
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

@SessionScoped
@ManagedBean(name="cotacaoMB")
public class CotacaoMB {
	
	public void alterarFornecedor(ActionEvent evt){
		String idFor = (String) evt.getComponent().getAttributes().get("tpFornecedor");
		this.setIdFornecedor(idFor);
	}
Caros,

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

espero que seja util...vlw

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

F

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)
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+"]";
	}
}
Meu MB
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<Condicao> condicoes;
	private List<String> 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(")")));
			
		}
	}*/
}
meu XHTML
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:t="http://myfaces.apache.org/tomahawk"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<link rel="shortcut icon" type="image/x-icon" href="../../templates/resources/image/favicon.ico"  />
<link rel="stylesheet" type="text/css" href="../../templates/resources/css/home.css"/>
<title>..::Billing Verification::..</title>
<!-- <script type="text/javascript">
    jQuery(function() {
    	jQuery('.ui-datatable tbody').sortable();
    });
</script> -->
</h:head>
<h:body style="background-color:#666666;">
	<div id="pagina">
		<center>
		<!-- Importando a página TOPO -->
			<div id="topo">
				<ui:insert name="topo">
					<ui:include src="/templates/topo.xhtml"/>
				</ui:insert> 
			</div>
			<!-- Importando a página MENU -->
			<div id="menu">
				<ui:insert name="menu">
					<ui:include src="/templates/menu.xhtml"/> 			
				</ui:insert>
			</div>
		<!-- Parte principal do sistema -->
			<div id="principal">
			<!-- Criação da TAB -->
			<p:tabView id="tabView">  
			    <p:tab id="tab1" title="Saída CBill NPort" closable="true">
			    <!-- Formulário dos Campos que compõem a Query --> 
			    	<h:form id="formNPort"> 
				        <h:panelGrid id="gridPrincipal">   
				        <!-- Painel com os Botões no topo do gridPrincipal -->
				            <p:panel header="Editor" style="width:550px;font-size:14px;" id="buttonPanel">
				            	<!-- Botão de adição da condição no dataTable Regra -->
								<p:commandButton icon="somar" title="Adicionar Condição" actionListener="#{mbconsultanport.montar}" update="regraPanel"/> | 
								<!-- Botão de tirar uma condição no dataTable Regra -->
								<p:commandButton icon="tirar" title="Remover Condição" actionListener="#{mbconsultanport.removeLinha}" update="regraPanel"/> |
								<!-- Botão de adição de parênteses no dataTable Regra -->
								<p:commandButton icon="abrirparenteses" title="Adicionar Parênteses" actionListener="#{mbconsultanport.addParentesesCampo}" update="regraPanel"/> |
								<!-- Botão de adição tirar parênteses no dataTable Regra -->
								<p:commandButton icon="tirarparenteses" title="Tirar Parênteses" actionListener="#{mbconsultanport.tirarParenteseCampo}"   update="regraPanel"/> |
								<p:commandButton icon="retirarparenteses" title="Tirar Parênteses" actionListener="#{mbconsultanport.tirarParentesesValor}" update="regraPanel"/> |
								<!-- Botão de adição de parênteses no dataTable Regra -->
								<p:commandButton icon="fecharparenteses" title="Fechar Parênteses" actionListener="#{mbconsultanport.addParentesesValor}" update="regraPanel" /> |
								<!-- Botão de limpar a lista do dataTable que informa as condições da Query -->
								<p:commandButton icon="limpar" title="Limpar SQL" actionListener="#{mbconsultanport.limpaQuery}" update="regraPanel" /> |
								<!-- Botão  de transformar as listas de condições para o formato SQL e jogar em uma Dialog -->
								<p:commandButton oncomplete="dglsql.show()" icon="sql" title="Visualizar SQL" update="dglsql" actionListener="#{mbconsultanport.mostrarSql}" /> |
								<!-- Botão para aplicar a query, buscar os resultados do Banco e jogar em uma Dialog -->
								<p:commandButton oncomplete="resultadosql.show()" icon="ok" title="Aplicar Query" update="resultadosql" actionListener="#{mbconsultanport.aplicarSql}"/>			
							</p:panel> 
							<!-- Fim do Painel dos Botões -->
							<!-- Abertura do Painel onde tem os campos da condição da query -->
							<p:panel header="Construtor" style="width:550px;font-size:14px;" id="construtorPanel">
								<p:panelGrid styleClass="semBorda" id="gridConstrutor">
									<p:row>
										<!-- coluna que busca os campos da tabela no Teradata -->
										<p:column><h:outputLabel value="Campos:"/></p:column>
										<p:column>
											<p:selectOneMenu id="campo" value="#{mbconsultanport.campo.tipo}" 
											styleClass="fonte">
												<f:selectItem itemLabel="Selecione" itemValue="empty" />
												<f:selectItems value="#{mbconsultanport.campos}" var="c" itemLabel="#{c.tipo}" itemValue="#{c.tipo}"/>
											</p:selectOneMenu>
										</p:column>
									</p:row>
									<p:row>
										<!-- Operador Condicional para montagem da query -->
										<p:column><h:outputLabel value="Condições:"/></p:column>
										<p:column>
											<p:selectOneMenu id="condicao" value="#{mbconsultanport.opCondicional}" style="width:129px;" styleClass="fonte">
												<f:selectItems value="#{mbconsultanport.operadorCondicionals}" var="opc" itemLabel="#{opc.tipo}" itemValue="#{opc}"/>
												<p:ajax update="valor2" listener="#{mbconsultanport.desabilitar2}"/>
											</p:selectOneMenu>
										</p:column>
									</p:row>
									<p:row>
										<!-- Comparação entre Valor e Campo para montagem da query -->
										<p:column><h:outputLabel value="Comparar:"/></p:column>
										<p:column>
											<p:selectOneMenu id="comparar" value="#{mbconsultanport.comparar}"
											  style="width:129px;" styleClass="fonte">
												<f:selectItem itemLabel="Selecione" itemValue="empty"/>
												<f:selectItems value="#{mbconsultanport.comparacao}" var="cp" itemLabel="#{cp.tipo}" itemValue="#{cp}" />
												<p:ajax update="valor, campo2" listener="#{mbconsultanport.desabilitar}" />
											</p:selectOneMenu>
										</p:column>
									</p:row>
									<p:row>
										<!-- Operador padrão para montagem da query -->
										<p:column><h:outputLabel value="Operadores:"/></p:column>
										<p:column>
											<p:selectOneMenu id="operadores" value="#{mbconsultanport.operador}" style="width:129px;" styleClass="fonte">
												<f:selectItem itemLabel="Selecione" itemValue="empty"/>
												<f:selectItems value="#{mbconsultanport.operadores}" var="op" itemLabel="#{op.tipo}" itemValue="#{op}"/>
											</p:selectOneMenu>
										</p:column>
									</p:row>
									<p:row>
										<!-- Valor para montagem da Query -->
										<p:column><h:outputLabel value="Valor:"/></p:column>
										<p:column><p:inputText value="#{mbconsultanport.condicao.valor1}" style="width:120px;" id="valor" 
										disabled="#{mbconsultanport.inputHabilitado}" />
										</p:column>
									</p:row>
									<p:row>
										<!-- Campo para montagem da Query -->
										<p:column><h:outputLabel value="Campo:"/></p:column>
										<p:column>
											<p:selectOneMenu value="#{mbconsultanport.campo}" id="campo2" 
											disabled="#{!mbconsultanport.inputHabilitado}" styleClass="fonte">
												<f:selectItem itemLabel="Selecione" itemValue="empty"/>
												<f:selectItems value="#{mbconsultanport.campos}" />
											</p:selectOneMenu>
										</p:column>
									</p:row>
									<p:row>
										<!-- Valor para montagem da Query -->
										<p:column><h:outputLabel value="Valor:"/></p:column>
										<p:column><p:inputText value="#{mbconsultanport.valor.tipo}" style="width:120px;" id="valor2"
										disabled="#{mbconsultanport.inputHabilitado2}" /> 
										 </p:column>
									</p:row>
								</p:panelGrid>
								
							</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>
</html>

abs

F

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

K

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.

M

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

(...)
<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>

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:
publicpublic TuplaRelatorio getConsultaParametros() {

        return consultaParametros;
    }

Coloque:

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

        return consultaParametros;
    }
I

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

A

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>

A

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>
Criado 10 de novembro de 2011
Ultima resposta 18 de set. de 2021
Respostas 27
Participantes 13