(Resolvido) PrimeFaces dataTalbe - Problemas com selectionMode

2 respostas
E

Olá galera, estou com o seguinte problema, tenho uma dataTable que lista todos os itens de um Pedido.
Gostaria de fazer a seleção de um item X da minha dataTable e fazer algumas alteraçoes como: excluir ou editar o item selecionado.
Eu tenho um item em meu ManagedBean que receberia o valor do item selecionado e ai então, eu faria as alterações desejadas.
Porem, ao selecionar a linha do item, o valor do item selecionado não é passado p/ meu ManagedBean.
Como resolver esse problema?

Obs: o código está bastante grande, então vou colocar somente a parte do dataTable e o ManagedBean.
Obrigado a todos.

<p:dialog header="Editar Pedido" widgetVar="editarPedido" modal="true" showEffect="fade" appendToBody="true">
									<h:panelGrid columns="2" cellpadding="5" id="editPedido">
										<h:outputLabel for="fornecedor" value="Fornecedor: "></h:outputLabel>
										<h:outputText id="nomeFornecedor" value="#{editarPedidoCompra.pedido.fornecedor.nome}"></h:outputText>
										
										<h:outputLabel for="dataPedido" value="Data do Pedido"></h:outputLabel>
										<h:outputText id="dataPedido" value="#{editarPedidoCompra.pedido.dataCompra}">
											<f:convertDateTime locale="pt_BR"></f:convertDateTime>
										</h:outputText>
									</h:panelGrid>
									
									<br/>
									
										<p:dataTable id="itensPedido" var="item" value="#{editarPedidoCompra.listaItensPedido}" rowKey="#{item.id}"
														selection="#{editarPedidoCompra.itemSelecionado}" selectionMode="single" >
														
													<f:facet name="header">Clique sobre o item e escolha a opção desejada</f:facet>
													
													<p:column headerText="ID Produto">
														#{item.produto.id}
													</p:column>
													
													<p:column headerText="Produto">
														#{item.produto.descricao}
													</p:column>
													
													<p:column headerText="Quantidade">
														#{item.quantidade} KG
													</p:column>
													
													<p:column headerText="Total">
													<h:outputText value="R$ #{item.total}">
														<f:convertNumber locale="pt_BR"></f:convertNumber>
													</h:outputText>
													</p:column>
													
													<f:facet name="footer">
														<p:commandButton id="excluir" value="Excluir" icon="icon-delete"></p:commandButton>
														<p:commandButton id="editar" value="Editar" icon="icon-edit" update=":conteudo:display" oncomplete="dialogEdit.show()">
														</p:commandButton>
														<p:commandButton id="adicionar" value="Adicionar" icon="icon-adiciona"></p:commandButton>
													</f:facet>
										</p:dataTable>
							</p:dialog>
							
							<p:dialog id="confirmEdit" header="Edição de Pedido" widgetVar="dialogEdit" 
							modal="true" showEffect="fade" appendToBody="true">
							<h:panelGrid id="display" columns="3" cellpadding="2">
									<h:selectOneMenu value="#{editarPedidoCompra.produto}">
										<f:selectItems value="#{buscasGerenciadas.listaTodosProdutos}"
											var="produto"
											itemLabel="#{produto.descricao}"
											itemValue="#{produto}"
										></f:selectItems>
									</h:selectOneMenu>
									
									<h:outputLabel value="Valor unitário: "></h:outputLabel>
									<h:inputText id="valorUnitario" value="#{editarPedidoCompra.itemSelecionado.valorUnitario}"></h:inputText>
									
									<h:outputText value="#{editarPedidoCompra.itemSelecionado.id}"></h:outputText>//AQUI NAO MOSTRA NADA, POIS O itemSelecionado ESTA NULO
									
							</h:panelGrid>
							</p:dialog>

ManagedBean:

package com.perfaco.mb;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.primefaces.event.SelectEvent;

import com.perfaco.dao.DAO;
import com.perfaco.dao.JPAUtil;
import com.perfaco.modelo.ItemCompra;
import com.perfaco.modelo.PedidoCompra;
import com.perfaco.modelo.Produto;

@ManagedBean
@ViewScoped
public class EditarPedidoCompra implements Serializable {
	private PedidoCompra pedido;
	private ItemCompra itemSelecionado;
	private Produto produto;
	
	
	public List<ItemCompra> getListaItensPedido(){
		EntityManager em = new JPAUtil().getEntityManager();
		Query q = em.createQuery("SELECT i FROM ItemCompra i WHERE i.pedido = :p");
		q.setParameter("p", pedido);
		return q.getResultList();
	}
	
	public void editaPedido(){
		FacesContext context = FacesContext.getCurrentInstance();
		if(this.pedido==null){
			context.addMessage(null, new FacesMessage("Houve um Erro"));
		}else{
			DAO<PedidoCompra> dao = new DAO<PedidoCompra>(PedidoCompra.class);
			dao.atualiza(pedido);
			context.addMessage(null, new FacesMessage("Pedido n "+pedido.getId()+ "editado com sucesso"));
			this.pedido = new PedidoCompra();
		}
	}
	
	public PedidoCompra getPedido() {
		return pedido;
	}

	public void setPedido(PedidoCompra pedido) {
		this.pedido = pedido;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public ItemCompra getItemSelecionado() {
		return itemSelecionado;
	}

	public void setItemSelecionado(ItemCompra itemSelecionado) {
		this.itemSelecionado = itemSelecionado;
	}

}

2 Respostas

A

eliezerbs9, bom dia cara blzz, vou te ajuda nessa duvida sua

o popup que esta tentando fazer deve ter o seguinte data table simples

<p:dataTable value="#{pessoaMb.lgrList}" selectionMode="single"  rowKey="#{item.id}"    >

    <p:ajax event="rowSelect" update=":formEdicao:tabs:grupo" listener="#{pessoaMb.selectLgr}" oncomplete="dialogLogradouros.hide()" />
       
     <p:column >
                     <f:facet name="header">
                           <h:outputText value="Bairro"/>
                     </f:facet>
               <h:outputText value="#{item.bairro.descricao}"/>
      </p:column>    
           
 </p:dataTable>

no seu ManagedBean deve ter um metodo que fica escutando o evento do rowSelect

public void selectLgr(SelectEvent e) {
        pessoa.setEnderecoPrincipal(new Endereco());
        pessoa.getEnderecoPrincipal().setLogradouro((Logradouro) e.getObject());
    }

e tudo certo ate aqui.
A peste bastante atenção em como o código aqui ta escrito pois fais diferença Ok

coloque como resolvido se conseguir ate +

E

Funcionou.
No meu listener no ManagedBean eu fiz um cast do Object e referenciei o meu item p/ aquele objeto.
=) Obrigado!

Criado 16 de maio de 2012
Ultima resposta 16 de mai. de 2012
Respostas 2
Participantes 2