Datatable primefaces não retorna objeto ao selecionar linha

16 respostas
P

Amigos,

Esse código estava funcionando, não entendo porque agora parou de funcionar.
Quando eu clico no botão remover, ele me abre um pop-up perguntando se de fato a exclusão deve ocorrer. Só que ao confirmar, agora ele tenta excluir um objeto null, ou seja dá erro. Pq o Datatable está retornando null e não o objeto de fato?

Aqui está a declaração do datatable

<p:dataTable id="partidos" var="partido"
				value="#{partidosBean.listaPartidos}" rowKey="#{partido.id}"
				selection="#{partidosBean.partidoSelecionado}"
				selectionMode="single" style="width:60%">

Aqui o commandButton que deve abrir o pop-up

<p:commandButton id="btRemover" icon="ui-icon-trash"
							title="Remover" onclick="confirmaExclusao.show();">
						</p:commandButton>

Para todos os efeitos, segue o código inteiro:

<?xml version="1.0"  encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	xmlns:prog="http://prog.tiago.com.br"
	template="/WEB-INF/templates/default.xhtml">


	<ui:define name="conteudo">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<prog:confirmarExclusaoPartidoDialog id="confirmarExclusaoPartido" />
		<prog:novoPartidoForm id="novoPartido" />


		<h:form id="formPrincipal">
			<p:growl id="growMensagens" showDetail="true" sticky="false"
				autoUpdate="false" life="3000" />
			<h:outputLabel value="Partidos políticos"
				style="font-weight:bold;font-size:20px" />
			<hr />
			<br />

			<p:dataTable id="partidos" var="partido"
				value="#{partidosBean.listaPartidos}" rowKey="#{partido.id}"
				selection="#{partidosBean.partidoSelecionado}"
				selectionMode="single" style="width:60%">

				<f:facet name="header">
            Aqui você pode editar, excluir e criar novos partidos políticos.
        </f:facet>

				<p:column headerText="Partido" style="width:40%">
            #{partido.partidoEleitoral} 
        </p:column>

				<p:column headerText="Sigla" style="width:10%">
            #{partido.sigla}
        </p:column>

				<p:column headerText="Código" style="width:10%">
            #{partido.codigoPartidario}
        </p:column>

				<p:column headerText="Ativo?" style="width:08%">
            #{partido.ativo? 'Sim':'Não'}
        </p:column>

				<p:column style="width:10%">
					<h:panelGroup layout="horizontal">
						<p:commandButton id="btEditar" icon="ui-icon-pencil"
							actionListener="#{partidosBean.citar}" title="Editar">
						</p:commandButton>
						<p:commandButton id="btRemover" icon="ui-icon-trash"
							title="Remover" onclick="confirmaExclusao.show();">
						</p:commandButton>
					</h:panelGroup>
				</p:column>
				<f:facet name="footer">
					<p:commandButton id="btNovo" value="Adicionar novo partido"
						icon="ui-icon-plusthick" oncomplete="novoPartidoDlg.show();"
						actionListener="#{partidosBean.criarNovoPartido}" />
				</f:facet>

			</p:dataTable>

		</h:form>
	</ui:define>
</ui:composition>

E por fim, o componente criado que de fato exclui o objeto

<?xml version='1.0' encoding='UTF-8' ?>
<!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">

<ui:component>
	<!-- Confirmação de exclusão de partido político -->
	<h:form id="formExcluirPartido">

		<p:confirmDialog id="confirmaExclusao" appendToBody="true"
			message="Deseja realmente excluir o partido selecionado?"
			header="Excluir partido" severity="alert"
			widgetVar="confirmaExclusao">

			<p:commandButton id="confirm" value="Sim, desejo"
				actionListener="#{partidosBean.citar}"
				oncomplete="confirmaExclusao.hide();"
				update=":formPrincipal:growMensagens,:formPrincipal:partidos" />
			<p:commandButton id="decline" value="Não, me enganei"
			actionListener="#{partidoBean.citar}"
				onclick="confirmaExclusao.hide()" type="button" />
		</p:confirmDialog>

	</h:form>
</ui:component>
</html>

Agradeço qualquer ajuda!!!

16 Respostas

T

Você mudou alguma coisa lá no DAO
porque que eu falo

no método delete/remover la no dao

você precisa fazer um find pelo id
e isso não deve esta ocorrendo, por isso o valor vem nulo

caso não tenha mudado nada

tente escrever em tela o id da linha selecionada

Att

P

tmvolpato:
Você mudou alguma coisa lá no DAO
porque que eu falo

no método delete/remover la no dao

você precisa fazer um find pelo id
e isso não deve esta ocorrendo, por isso o valor vem nulo

caso não tenha mudado nada

tente escrever em tela o id da linha selecionada

Att

Valeu amigo, mas quando eu debugo, percebo que ele não tá pegando o id, nem o objeto.
Se eu entrar com o id manualmente funciona, mas pq o objeto não tá sendo recuperado?

T

seu dialog esta em outra página?
ele funcionava assim antes em outra?

P

seu dialog esta em outra página?
ele funcionava assim antes em outra?

Sim, o meu dialog está em outra página. Antes, quando estava num outro form, mas dentro do mesmo .xhtml funcionava.
Mesmo que eu coloque o form dentro da mesma página, não funciona mais. :roll:

T

eu tentei usar dialog fora da página e sem sucesso

mas nesse seu caso eu percebi o seguinte
só para testar volte seu dialog para a mesma página
dai depois que funciona você tenta trabalhar desse jeito

vamos lá então

segue o que deve ser mudado
Antes

<p:commandButton id="btRemover" icon="ui-icon-trash" title="Remover" onclick="confirmaExclusao.show();"> </p:commandButton>

Depois

<p:commandButton id="btRemover" icon="ui-icon-trash" title="Remover" onclick="confirmaExclusao.show();"> <f:setPropertyActionListener target="#{partidosBean.partidoSelecionado}" value="#{partido}" /> </p:commandButton>

Desse jeito você pega o item selecionado

Testa ai

P

Fiz o que você me pediu.

Meu código ficou assim:

<?xml version="1.0"  encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	xmlns:prog="http://prog.tiago.com.br"
	template="/WEB-INF/templates/default.xhtml">


	<ui:define name="conteudo">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	
		<prog:novoPartidoForm id="novoPartido" />


		<h:form id="formPrincipal">
			<p:growl id="growMensagens" showDetail="true" sticky="false"
				autoUpdate="false" life="3000" />
			<h:outputLabel value="Partidos políticos"
				style="font-weight:bold;font-size:20px" />
			<hr />
			<br />

			<p:dataTable id="partidos" var="partido"
				value="#{partidosBean.listaPartidos}" rowKey="#{partido.id}"
				selectionMode="single" style="width:60%">

				<f:facet name="header">
            Aqui você pode editar, excluir e criar novos partidos políticos.
        </f:facet>

				<p:column headerText="Partido" style="width:40%">
            #{partido.partidoEleitoral} 
        </p:column>

				<p:column headerText="Sigla" style="width:10%">
            #{partido.sigla}
        </p:column>

				<p:column headerText="Código" style="width:10%">
            #{partido.codigoPartidario}
        </p:column>

				<p:column headerText="Ativo?" style="width:08%">
            #{partido.ativo? 'Sim':'Não'}
        </p:column>

				<p:column style="width:10%">
					<h:panelGroup layout="horizontal">
						<p:commandButton id="btEditar" icon="ui-icon-pencil"
							actionListener="#{partidosBean.citar}" title="Editar">
						</p:commandButton>
						<p:commandButton id="btRemover" icon="ui-icon-trash"
							title="Remover" onclick="confirmaExclusao.show();">
							<f:setPropertyActionListener target="#{partidosBean.partidoSelecionado}" value="#{partido}" /> 
						</p:commandButton>
					</h:panelGroup>
				</p:column>
				<f:facet name="footer">
					<p:commandButton id="btNovo" value="Adicionar novo partido"
						icon="ui-icon-plusthick" oncomplete="novoPartidoDlg.show();"
						actionListener="#{partidosBean.criarNovoPartido}" />
				</f:facet>

			</p:dataTable>

		</h:form>

		<h:form id="formExcluirPartido">

			<p:confirmDialog id="confirmaExclusao" appendToBody="true"
				message="Deseja realmente excluir o partido selecionado?"
				header="Excluir partido" severity="alert"
				widgetVar="confirmaExclusao">

				<p:commandButton id="confirm" value="Sim, desejo"
					actionListener="#{partidosBean.citar}"
					oncomplete="confirmaExclusao.hide();"
					update=":formPrincipal:growMensagens,:formPrincipal:partidos" />
				<p:commandButton id="decline" value="Não, me enganei"
					actionListener="#{partidoBean.citar}"
					onclick="confirmaExclusao.hide()" type="button" />
			</p:confirmDialog>

		</h:form>
	</ui:define>
</ui:composition>

No entanto, continua sem funcionar. O retorno continua sendo null. :roll:

A

prog.tiago vo te ajuda o que ta acontecendo e erro de validação
e te explica isso vai demora muito vamos foca no seu problema

vc tem uma tem uma tabela e dentro dela um o p:commandButton com o f:setPropertyActionListener

digamos que ao ocorrer erro na tela o PrimeFaces não sabe o que submeter no formulário podemos ajulado com uma propriedade do p:commandButton o process
nele vc coloca o Id do componente que vc quer submeter no caso de DataTables id o da propria

Vo coloca os códigos aqui também pra facilita

<p:dataTable id="tablaProcedimento" value="#{procedimentoMb.proList}" var="procedimento"
                      selection="#{procedimentoMb.procedimento}" >

         <p:column >
               <f:facet name="header">
                     <h:outputText value="Código"  />
               </f:facet>
                     <h:outputText value="#{procedimento.codigo}" />
          </p:column>

         <p:column style=" width: 60px">
               <p:commandLink process="@this tablaProcedimento"  action="#{procedimentoMb.chamarProcediemtosPrarametros()}">
                        <h:graphicImage title="Vsualizar" url="/images/icons/edit-18.png" />
                      <f:setPropertyActionListener value="#{procedimento}"   target="#{procedimentoMb.procedimento}" />
               </p:commandLink>
          </p:column>
   
</p:dataTable>

aqui esta uma simples tabela so com o nessesario pra ela funciona veja que o commandLink temos um

process="@this tablaProcedimento"

ele deve ser o Id da tabela se precisa adiciona mais basta dar um espaço e ir adicionando os ID/s

Marque como resolvido

P

Valeu Alcir,

Mas continua sem funcionar. Vou dar um banho de sal grosso nesse código hein.

Abraço

P

Boa tarde amigos,

Consegui resolver o meu problema :D

Utilizei o para enviar os dados da view ao MB.

Vou postar o código inteiro para vocês verem:

partidos.xhtml

<?xml version="1.0"  encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui"
	xmlns:prog="http://prog.tiago.com.br"
	template="/WEB-INF/templates/default.xhtml">



	<ui:define name="conteudo">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

		<!-- COMPONENTES EXTERNOS -->
		
		<prog:novoPartidoForm id="novoPartido" />
		<prog:confirmarExclusaoPartidoDialog id="confirmarExclusao" />


		<!-- FORMULÁRIO PRINCIPAL -->
		
		<h:form id="formPrincipal">

			<p:growl id="growMensagens" showDetail="true" sticky="false"
				autoUpdate="false" life="3000" />

			<h:outputLabel value="Partidos políticos"
				style="font-weight:bold;font-size:20px" />

			<hr />

			<br />

			<p:dataTable id="partidos" var="partido"
				value="#{partidosBean.listaPartidos}" style="width:60%">

				<f:facet name="header">
					Aqui você pode editar, excluir e criar novos partidos políticos.
        		</f:facet>

				<p:column headerText="Partido" style="width:40%">
            		#{partido.partidoEleitoral} 
        		</p:column>

				<p:column headerText="Sigla" style="width:10%">
            		#{partido.sigla}
        		</p:column>

				<p:column headerText="Código" style="width:10%">
            		#{partido.codigoPartidario}
        		</p:column>

				<p:column headerText="Ativo?" style="width:08%">
            		#{partido.ativo? 'Sim':'Não'}
        		</p:column>

				<p:column style="width:10%">

					<h:panelGroup layout="horizontal">

						<p:commandButton id="btEditar" icon="ui-icon-pencil"
							action="#{partidosBean.citar}" title="Editar">

							<f:setPropertyActionListener value="#{partido}"
								target="#{partidosBean.partidoSelecionado}">
							</f:setPropertyActionListener>

						</p:commandButton>

						<p:commandButton id="btRemover" icon="ui-icon-trash"
							action="#{partidosBean.citar}" title="Remover"
							onclick="confirmaExclusao.show();">

							<f:setPropertyActionListener value="#{partido}"
								target="#{partidosBean.partidoSelecionado}">
							</f:setPropertyActionListener>

						</p:commandButton>

					</h:panelGroup>

				</p:column>

				<f:facet name="footer">

					<p:commandButton id="btNovo" value="Adicionar novo partido"
						icon="ui-icon-plusthick" oncomplete="novoPartidoDlg.show();"
						actionListener="#{partidosBean.criarNovoPartido}">
					</p:commandButton>

				</f:facet>

			</p:dataTable>

		</h:form>

	</ui:define>
</ui:composition>

confirmarExclusaoPartido.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!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">

<ui:component>

	<!-- FORMULÁRIO PARA EXCLUSÃO DE PARTIDO -->

	<h:form id="formExcluirPartido">

		<p:confirmDialog id="confirmaExclusao" appendToBody="true"
			message="Deseja realmente excluir o partido selecionado?"
			header="Excluir partido" severity="alert"
			widgetVar="confirmaExclusao">

			<p:commandButton id="confirm" value="Sim, desejo"
				actionListener="#{partidosBean.removerPartido}"
				oncomplete="confirmaExclusao.hide();"
				update=":formPrincipal:growMensagens,:formPrincipal:partidos" />

			<p:commandButton id="decline" value="Não, me enganei"
				onclick="confirmaExclusao.hide()" type="button" />
		</p:confirmDialog>

	</h:form>
</ui:component>
</html>

Agradeço imensamente a ajuda de todos. Sem dúvidas, esse fórum está me ensinando e muito à desenvolver boas soluções.

Um forte abraço à cada um.

M

Tem como voce informar o melhor a resolução do teu problema. Por exemplo este metodo partidoBean.citar o que ele faz?

M

Pessoal sou novo no primefaces e estou com um problema.
To tentando criar a principio uma tela simples de um crud usando templates.
No caso tenho um xhtml principal com algumas divisoes e chamo as telas no centro da divisão.
Ate ai tudo bem, a grade é exibida com os dados do banco so que nela existem dois botões onde ou posso editar ou excluir o registro.
No caso sempre quando tento excluir ou editar o objeto retorna sempre null.
Detalhe é que se eu utilizar o objeto ouputtext da certo, mais quando coloco inputtext da null
Vou postar o codigo para facilitar.

Aqui é meu template

<?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:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">

    <f:view contentType="text/html">
        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
                <title>Enquetes</title>
            </f:facet>
            <style type="text/css">
                body {background-color: #eeeeee; font-size: 12px}
                .semBorda tr, .semBorda td {  
                    border: none !important;  
                } 
            </style>
        </h:head>

        <h:body>            

            <div align="center">
                <h:form id="form">                    

                    <p:growl id="messages" showDetail="true"/> 

                    <p:layout style="min-width:720px;max-width:1020px;min-height:700px;max-height:700px" id="tabela"> <!-- style="min-width:1020px;max-width:1020px;min-height:600px">-->

                        <p:layoutUnit position="north" size="80"> 
                            <ui:insert name="cabecalho">
                                <ui:include src="/template/estrutura/cabecalho.xhtml" />
                            </ui:insert>  
                        </p:layoutUnit> 

                        <p:layoutUnit position="west" size="200px" resizable="true" closable="false" collapsible="true" effect="drop">  
                            <ui:insert name="menu">
                                <ui:include src="/menu/menu.xhtml" />
                            </ui:insert>                          
                        </p:layoutUnit>  

                        <p:layoutUnit position="center"> 
                            <ui:insert name="centro">

                            </ui:insert>
                        </p:layoutUnit> 

                        <p:layoutUnit position="south" closable="true" collapsible="true">
                            <ui:insert name="rodape">
                                <ui:include src="/template/estrutura/rodape.xhtml" />
                            </ui:insert> 
                        </p:layoutUnit>

                    </p:layout>

                    <ui:insert name="dialog">
                        
                    </ui:insert> 
                </h:form>
            </div>            
        </h:body>

    </f:view>

</html>

Enquete.xhtml

<?xml version='1.0' encoding='UTF-8' ?>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"> 
    <f:view>

        <ui:composition template="/template/padrao.xhtml">  
            <ui:define name="centro">

                <p:dataTable id="dtEnq" var="enq" value="#{enqueteBean.listaEnquetes}" rowKey="#{enq.id_enquete}"
                             paginator="true" rows="15" rowsPerPageTemplate="5,10,15,20" 
                             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                             selectionMode="single" editable="true" selection="#{enqueteBean.selecaoEnquete}">
                    <f:facet name="header">  
                        Enquetes
                    </f:facet>

                    <p:ajax event="rowEdit" listener="#{enqueteBean.onEdit}" update=":form:messages" />  
                    <p:ajax event="rowEditCancel" listener="#{enqueteBean.onCancel}" update=":form:messages" /> 

                    <p:column headerText="Código" sortBy="#{enq.id_enquete}" filterBy="#{enq.id_enquete}" style="width:10%" >  
                        <h:outputText value="#{enq.id_enquete}" style="text-align:left"/>  
                    </p:column>  

                    <p:column headerText="Descrição" sortBy="#{enq.descricao}" filterBy="#{enq.descricao}">  
                        <h:outputText value="#{enq.descricao}" />  
                    </p:column>  

                    <p:column headerText="Status" sortBy="#{enq.status}" filterBy="#{enq.status}" style="width:10%">  
                        <h:outputText value="#{enq.status}" />  
                    </p:column>

                    <p:column style="width:70px"> 
                        <f:facet name="header">
                            <h:outputText value="Ação"/>
                        </f:facet> 
                        <p:commandLink id="edit" update=":form:carDetail"  oncomplete="carDialog.show()" value="Editar">  
                            <h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />   
                            <f:setPropertyActionListener value="#{enq}" target="#{enqueteBean.selecaoEnquete}" />  
                        </p:commandLink>                          
                        <h:outputText value="/"/>
                        <p:commandLink id="delete" update=":form:dtEnq" oncomplete="confirmation.show()" value="Excluir">  
                            <h:outputText styleClass="ui-icon ui-icon-search" style="margin:0 auto;" />   
                            <f:setPropertyActionListener value="#{enq}" target="#{enqueteBean.selecaoEnquete}" />  
                        </p:commandLink>                          
                    </p:column> 

                </p:dataTable>  

            </ui:define>


            <ui:define name="dialog">            
                <!--*******************************************-->
                <!--Tela de confirmação de exclusão do registro-->
                <!--*******************************************-->
                <p:confirmDialog message="Deseja realmente excluir este registro: #{enqueteBean.selecaoEnquete.id_enquete}?" hideEffect="explode" header="Excluindo Enquete" severity="alert" widgetVar="confirmation" modal="true">
                    <!--caso seja sim chamo o metodo excluir, e fecho o modal com o oncomplete, tenho o process que estou dizendo para processar o form, e update para atualizar a tabela-->
                    <p:commandButton id="btnSim" value="Sim" oncomplete="confirmation.hide();" actionListener="#{enqueteBean.excluirEnquete}" process="@form" update="tabela" />
                    <!--caso seja não somente fecha o modal-->
                    <p:commandButton id="btnNao" value="Não" onclick="confirmation.hide();" type="button"/>
                </p:confirmDialog>

                <!--*******************************************-->
                <!--Tela de Edição do registro-->
                <!--*******************************************-->
                <p:dialog header="Enquente" showEffect="fade" hideEffect="fade" modal="true"  
                          widgetVar="carDialog">  

                    <p:outputPanel id="carDetail" style="text-align:left;">  
                        <p:graphicImage id="carImage" value="/img/ajaxLoader.gif"/>  

                        <h:panelGrid  columns="2" cellpadding="5">  
                            <h:outputLabel for="txCod" value="Código: " />  
                            <h:inputText id="txCod" 
                                          value="#{enqueteBean.selecaoEnquete.id_enquete}" />  

                            <h:outputLabel for="txDesc" value="Descrição: " />  
                            <h:inputText id="txDesc" size="60"  
                                          value="#{enqueteBean.selecaoEnquete.descricao}" />  

                            <h:outputLabel for="txSt" value="Status: " size="10"/>  
                            <h:inputText id="txSt" value="#{enqueteBean.selecaoEnquete.status}" />                              
                        </h:panelGrid>  

                        <p:separator/>
                        
                        <p:outputPanel id="botoes" layout="block">
                            <p:panelGrid columns="2" styleClass="semBorda" cellpadding="5"> 
                                <p:commandButton value="Salvar" />
                                <p:commandButton value="Cancelar" onclick="carDetail.hide();"/>
                            </p:panelGrid>
                        </p:outputPanel>

                    </p:outputPanel>
                </p:dialog>
            </ui:define>

        </ui:composition>  

    </f:view> 
</html>

Meu MB EnqueteBean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.enquete.menagedbean;

import br.com.enquete.bean.Enquete;
import br.com.enquete.dao.EnqueteDAO;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.RowEditEvent;

/**
 *
 * @author cf03612
 */
@ManagedBean(name = "enqueteBean")
@RequestScoped
public class EnqueteBean {

    private EnqueteDAO enqueteDAO = new EnqueteDAO();
    private Enquete selecaoEnquete = new Enquete();
    private List<Enquete> enquetes;   

    public EnqueteBean() {
    }

    public void novaEnquete() throws ClassNotFoundException, SQLException {
        enqueteDAO.novo(selecaoEnquete);
        //para limpar o cached
        enquetes = null;        
    }

    public void alterarEnquete() throws ClassNotFoundException, SQLException {
        enqueteDAO.alterar(selecaoEnquete);
        //para limpar o cached
        enquetes = null;
    }

    public void excluirEnquete() throws ClassNotFoundException, SQLException {
        enqueteDAO.excluir(selecaoEnquete);
        //para limpar o cached
        enquetes = null;
    }

    public List<Enquete> getListaEnquetes() throws ClassNotFoundException, SQLException {
        if (enquetes == null) {
            enquetes = enqueteDAO.getAllEnquetes();
        }
        return enquetes;
    }
    
    public Enquete getSelecaoEnquete() {
        return selecaoEnquete;
    }

    public void setSelecaoEnquete(Enquete selecaoEnquete) {
        this.selecaoEnquete = selecaoEnquete;
    }

}
E

Bom dia
Tenta mudar o escopo do ManagedBean de @RequestScoped para @ViewScoped ou SessionScoped.

M

Edson,
Tentei mais nao deu certo.
Percebi que ao retirar do template a pagina sozinha funciona contudo dentro do template sempre da esse erro.

V

Pessoal, queria aproveitar este post e pedir ajudar a vocês com o meu código abaixo. Estou tendo dificuldades quanto ao número de forms utilizados. Enfim, uma hora um form funciona, outra hora não … Agradeço a atenção.

<ui:composition template="index.xhtml" 
                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:define name="top">
        <h3>Chamadas</h3>
    </ui:define>
    <ui:define name="conteudo">
        <h:form id="form_status">
            <p:menubar>
                <p:submenu label="Listar Chamadas">
                    <p:menuitem value="Pendentes" actionListener="#{problemaController.listarChamadasPendentes()}" update=":formGeral:tabelaChamadas"/>
                    <p:menuitem value="Em Andamento" actionListener="#{problemaController.listarChamadasAndamento()}" update=":formGeral:tabelaChamadas"/>
                    <p:menuitem value="Resolvidos" actionListener="#{problemaController.listarChamadasResolvidos()}" update=":formGeral:tabelaChamadas"/>
                    <p:menuitem value="Finalizados" actionListener="#{problemaController.listarChamadasFinalizados()}" update=":formGeral:tabelaChamadas"/>
                </p:submenu>
            </p:menubar>
        </h:form> <br/>

        <h:form id="formGeral">

            <p:dataTable id="tabelaChamadas" value="#{problemaController.chamadas}" style="width: 600px;" var="chamadasTable">
                <p:column>
                    <f:facet name="header"><h:outputText value="Título"/></f:facet>
                    #{chamadasTable.problema.titulo}
                </p:column>
                <p:column>
                    <f:facet name="header"><h:outputText value="Status"/></f:facet>
                    #{chamadasTable.estado}
                </p:column>
                <p:column>
                    <f:facet name="header"><h:outputText value="Atualizar Status"/></f:facet>
                      <h:form id="form_status">                    
                          <p:growl id="msg" showDetail="true" showSummary="true"></p:growl>

                          <h:selectOneMenu value="#{problemaController.aux}">
                              <f:selectItem itemLabel="Alterar Status" itemValue=""/>
                              <f:selectItem itemLabel="Em Andamento" itemValue="Andamento"/>
                              <f:selectItem itemLabel="Resolvido" itemValue="Resolvido"/>
                              <f:selectItem itemLabel="Finalizado" itemValue="Finalizado"/>
                          </h:selectOneMenu>
                          <p:commandButton process="form_status" id="alterar" value="Alterar" update="msg :formGeral:tabelaChamadas" action="#{problemaController.alterarStatus()}" oncomplete="popup.hide()"/>
                      </h:form>
                </p:column>
                <p:column>
                    <f:facet name="header"><h:outputText value="Mensagens"/></f:facet>
                    <p:commandButton value="Visualizar" update=":formGeral:painel" oncomplete="popup.show()">
                        <f:setPropertyActionListener value="#{chamadasTable}" target="#{problemaController.chamadaSuporte}"/>
                    </p:commandButton>
                </p:column>  
            </p:dataTable>

            <!-- Abre Dialog com Mensagens. -->
            <p:dialog id="dialog" widgetVar="popup" header="Acompanhamento" width="500" resizable="false" appendToBody="true">

                <p:scrollPanel id="painel" style="height: 300px; text-align: left">
                    <p:dataList id="dtList" value="#{problemaController.chamadaSuporte.mensagens}" rendered="#{not empty problemaController.chamadaSuporte.mensagens}" var="chamadas" itemType="square">
                        <h:outputText value="#{chamadas.remetente}:  #{chamadas.texto}"/>
                    </p:dataList>
                </p:scrollPanel>   
                <p:separator/>                
            </p:dialog>
        </h:form>
    </ui:define>
</ui:composition>

:oops: :oops: :oops: :oops: :oops:

Alguma sugestão ???

A

Cara o problema de usar vários form é esse que vc está encontrando, mais se vc analizar seu codigo perceba que o id=“form_status” esta duplicado, e pode esta havendo algum conflito. Mas fica a dica, organize muito bem seus form e economize sua utilização, pois já tive dor de cabeça com eles, geralmente “form” dentro de “form” costumam a anular algumas funcionalidades.

P

prog.tiago,

estou passando por um problema parecido com o seu. no meu caso, a diferenca é que o meu botao está fora da datatable e, consequentemente, tambem nao uso setPropertyActionListener . alguem sabe se tem que fazer algo a mais para funcionar?

Criado 22 de maio de 2012
Ultima resposta 27 de abr. de 2013
Respostas 16
Participantes 8