Master detail com rich:datatable

Estou iniciando no java e gostaria de fazer um master detail simples, na mesta tela mas não consigo fazer a datatable detalhe exibir os registros detalhe do master.

A estrutura é PREPEDIDOVENDA e ITEMPREPEDIDOVENDA. As classes foram mapeadas pelo hibernate e foi feito relacionamento 1 para N.

Desde já, obrigado!

Itamar G. Jr.
Analista de Sistemas Sr
Werner Tecidos S/A
itamar.gjr!@gmail.com

MANAGER BEAN:

package manager;

import java.util.ArrayList;
import java.util.List;

import persistence.PrePedidoVendaDao;

import entity.PrePedidoVenda;

public class PrePedBean {
	private PrePedidoVenda prepedidovenda;
	
	private List<PrePedidoVenda> listaPrePedidoVenda;

	public PrePedBean() {
		prepedidovenda = new PrePedidoVenda();
		
		listaPrePedidoVenda = new ArrayList<PrePedidoVenda>();
	}

	public PrePedidoVenda getPrepedidovenda() {
		return prepedidovenda;
	}

	public void setPrepedidovenda(PrePedidoVenda prepedidovenda) {
		this.prepedidovenda = prepedidovenda;
	}

	public List<PrePedidoVenda> getListaPrePedidoVenda() {
	    try {
	    	listaPrePedidoVenda = new PrePedidoVendaDao().findAll(PrePedidoVenda.class, "numero_preped");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return listaPrePedidoVenda;
	}

	public void setListaPrePedidoVenda(List<PrePedidoVenda> listaPrePedidoVenda) {
		this.listaPrePedidoVenda = listaPrePedidoVenda;
	}
	
}

JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sistema de Pedidos - Werner Fábrica de Tecidos S/A</title>
</head>
<body>
	<f:view>
	  <a4j:form id="formconsultaprepedidos" >
	    <rich:dataTable value="#{mbprog.listaPrePedidoVenda}" var="pre">	
			<h:column>
				<f:facet name="header">
					<h:outputText value="Pré Pedido" />
				</f:facet>
				<h:outputText value="#{pre.numero_preped}" />
			</h:column>
	
			<h:column>
				<f:facet name="header">
					<h:outputText value="Data" />
				</f:facet>
				<h:outputText value="#{pre.data_preped}" />
			</h:column>
			
			<h:column>
				<f:facet name="header">
					<h:outputText value="Cliente" />
				</f:facet>
				<h:outputText value="#{pre.codigo_cliente}" />
			</h:column>
			
			<h:column>
				<f:facet name="header">
					<h:outputText value="Representante" />
				</f:facet>
				<h:outputText value="#{pre.codigo_representante}" />
			</h:column>
			
			<h:column>
				<f:facet name="header">
					<h:outputText value="Transportadora" />
				</f:facet>
				<h:outputText value="#{pre.codigo_transportadora}" />
			</h:column>
			
			<h:column>
				<f:facet name="header">
					<h:outputText value="Previsão de Entrega" />
				</f:facet>
				<h:outputText value="#{pre.previsaoentrega_preped}" />
			</h:column>
			
			<h:column>
				<f:facet name="header">
					<h:outputText value="Condição de Faturamento" />
				</f:facet>
				<h:outputText value="#{pre.codigo_condfat}" />
			</h:column>
			
			<h:column>
				<f:facet name="header">
					<h:outputText value="Tabela de Vendas" />
				</f:facet>
				<h:outputText value="#{pre.codigo_tabven}" />
			</h:column>
			
			<rich:column>
				<f:facet name="header">
					<h:outputText value="Detalhar" />
				</f:facet>
				
				<a4j:commandLink value="Selecionar" reRender="paineldetalhe">
					<f:setPropertyActionListener  value="#{pre}" target="#{mbprog.prepedidovenda}"/>
				</a4j:commandLink>
					
				
			</rich:column>
	    
	    </rich:dataTable>
	    
	    <br /><br />
 			
			<h:panelGrid id="paineldetalhe">
				
				<rich:dataGrid value="#{mbprog.prepedidovenda.itemprepedidovenda}" var="item">	
					<h:column>
						<f:facet name="header">
							<h:outputText value="Artigo" />
						</f:facet>
						<h:outputText value="#{item.codigo_artigo}" />
					</h:column>
				
				</rich:dataGrid>
				
			</h:panelGrid>
			
	  </a4j:form>  
	  <br /><br />
	  <a href="menuprincipal.jsf">Voltar</a>
	</f:view>
</body>
</html>

PREPEDIDOVENDA:

package entity;

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class PrePedidoVenda {
	@Id
	@Column
	private Integer numero_preped;
	@Column
	private Date    data_preped;
	@Column
	private Integer codigo_cliente;
	@Column
	private String  tipo_preped;
	@Column
	private Integer codigo_representante;
	@Column
	private Integer codigo_representante2;
	@Column
	private String  codigo_transportadora;
	@Column
	private String  codigo_transpredespacho;
	@Column
	private Integer id_tabven;
	@Column
	private String  obs_preped1;
	@Column
	private String  obs_preped2;
	@Column
	private String  obs_preped3;
	@Column
	private String  obs_preped4;
	@Column
	private String  previsaoentrega_preped;
	@Column
	private String  numpedcliente_preped;
	@Column
	private String  datapedcliente_preped;
	@Column
	private String  arquivo_preped;
	@Column
	private Date    datarecep_preped;
	@Column
	private String  japrint_preped;
	@Column
	private String  codigo_condfat;
	@Column
	private String  codigo_tabven;
	
	@OneToMany(mappedBy="prepedidovenda", cascade=CascadeType.ALL)
	private List<ItemPrePedidoVenda> itemprepedidovenda;
	
	public PrePedidoVenda(Integer numero_preped, Date data_preped,
			Integer codigo_cliente, String tipo_preped,
			Integer codigo_representante, Integer codigo_representante2,
			String codigo_transportadora, String codigo_transpredespacho,
			Integer id_tabven, String obs_preped1, String obs_preped2,
			String obs_preped3, String obs_preped4,
			String previsaoentrega_preped, String numpedcliente_preped,
			String datapedcliente_preped, String arquivo_preped,
			Date datarecep_preped, String japrint_preped,
			String codigo_condfat, String codigo_tabven) {
		super();
		this.numero_preped = numero_preped;
		this.data_preped = data_preped;
		this.codigo_cliente = codigo_cliente;
		this.tipo_preped = tipo_preped;
		this.codigo_representante = codigo_representante;
		this.codigo_representante2 = codigo_representante2;
		this.codigo_transportadora = codigo_transportadora;
		this.codigo_transpredespacho = codigo_transpredespacho;
		this.id_tabven = id_tabven;
		this.obs_preped1 = obs_preped1;
		this.obs_preped2 = obs_preped2;
		this.obs_preped3 = obs_preped3;
		this.obs_preped4 = obs_preped4;
		this.previsaoentrega_preped = previsaoentrega_preped;
		this.numpedcliente_preped = numpedcliente_preped;
		this.datapedcliente_preped = datapedcliente_preped;
		this.arquivo_preped = arquivo_preped;
		this.datarecep_preped = datarecep_preped;
		this.japrint_preped = japrint_preped;
		this.codigo_condfat = codigo_condfat;
		this.codigo_tabven = codigo_tabven;
	}

	public PrePedidoVenda() {
		super();
	}

	public List<ItemPrePedidoVenda> getItemprepedidovenda() {
		return itemprepedidovenda;
	}

	public void setItemprepedidovenda(List<ItemPrePedidoVenda> itemprepedidovenda) {
		this.itemprepedidovenda = itemprepedidovenda;
	}

	public Integer getNumero_preped() {
		return numero_preped;
	}

	public void setNumero_preped(Integer numero_preped) {
		this.numero_preped = numero_preped;
	}

	public Date getData_preped() {
		return data_preped;
	}

	public void setData_preped(Date data_preped) {
		this.data_preped = data_preped;
	}

	public Integer getCodigo_cliente() {
		return codigo_cliente;
	}

	public void setCodigo_cliente(Integer codigo_cliente) {
		this.codigo_cliente = codigo_cliente;
	}

	public String getTipo_preped() {
		return tipo_preped;
	}

	public void setTipo_preped(String tipo_preped) {
		this.tipo_preped = tipo_preped;
	}

	public Integer getCodigo_representante() {
		return codigo_representante;
	}

	public void setCodigo_representante(Integer codigo_representante) {
		this.codigo_representante = codigo_representante;
	}

	public Integer getCodigo_representante2() {
		return codigo_representante2;
	}

	public void setCodigo_representante2(Integer codigo_representante2) {
		this.codigo_representante2 = codigo_representante2;
	}

	public String getCodigo_transportadora() {
		return codigo_transportadora;
	}

	public void setCodigo_transportadora(String codigo_transportadora) {
		this.codigo_transportadora = codigo_transportadora;
	}

	public String getCodigo_transpredespacho() {
		return codigo_transpredespacho;
	}

	public void setCodigo_transpredespacho(String codigo_transpredespacho) {
		this.codigo_transpredespacho = codigo_transpredespacho;
	}

	public Integer getId_tabven() {
		return id_tabven;
	}

	public void setId_tabven(Integer id_tabven) {
		this.id_tabven = id_tabven;
	}

	public String getObs_preped1() {
		return obs_preped1;
	}

	public void setObs_preped1(String obs_preped1) {
		this.obs_preped1 = obs_preped1;
	}

	public String getObs_preped2() {
		return obs_preped2;
	}

	public void setObs_preped2(String obs_preped2) {
		this.obs_preped2 = obs_preped2;
	}

	public String getObs_preped3() {
		return obs_preped3;
	}

	public void setObs_preped3(String obs_preped3) {
		this.obs_preped3 = obs_preped3;
	}

	public String getObs_preped4() {
		return obs_preped4;
	}

	public void setObs_preped4(String obs_preped4) {
		this.obs_preped4 = obs_preped4;
	}

	public String getPrevisaoentrega_preped() {
		return previsaoentrega_preped;
	}

	public void setPrevisaoentrega_preped(String previsaoentrega_preped) {
		this.previsaoentrega_preped = previsaoentrega_preped;
	}

	public String getNumpedcliente_preped() {
		return numpedcliente_preped;
	}

	public void setNumpedcliente_preped(String numpedcliente_preped) {
		this.numpedcliente_preped = numpedcliente_preped;
	}

	public String getDatapedcliente_preped() {
		return datapedcliente_preped;
	}

	public void setDatapedcliente_preped(String datapedcliente_preped) {
		this.datapedcliente_preped = datapedcliente_preped;
	}

	public String getArquivo_preped() {
		return arquivo_preped;
	}

	public void setArquivo_preped(String arquivo_preped) {
		this.arquivo_preped = arquivo_preped;
	}

	public Date getDatarecep_preped() {
		return datarecep_preped;
	}

	public void setDatarecep_preped(Date datarecep_preped) {
		this.datarecep_preped = datarecep_preped;
	}

	public String getJaprint_preped() {
		return japrint_preped;
	}

	public void setJaprint_preped(String japrint_preped) {
		this.japrint_preped = japrint_preped;
	}

	public String getCodigo_condfat() {
		return codigo_condfat;
	}

	public void setCodigo_condfat(String codigo_condfat) {
		this.codigo_condfat = codigo_condfat;
	}

	public String getCodigo_tabven() {
		return codigo_tabven;
	}

	public void setCodigo_tabven(String codigo_tabven) {
		this.codigo_tabven = codigo_tabven;
	}

	@Override
	public String toString() {
		return "PrePedidoVenda [numero_preped=" + numero_preped
				+ ", data_preped=" + data_preped + ", codigo_cliente="
				+ codigo_cliente + ", tipo_preped=" + tipo_preped
				+ ", codigo_representante=" + codigo_representante
				+ ", codigo_representante2=" + codigo_representante2
				+ ", codigo_transportadora=" + codigo_transportadora
				+ ", codigo_transpredespacho=" + codigo_transpredespacho
				+ ", id_tabven=" + id_tabven + ", obs_preped1=" + obs_preped1
				+ ", obs_preped2=" + obs_preped2 + ", obs_preped3="
				+ obs_preped3 + ", obs_preped4=" + obs_preped4
				+ ", previsaoentrega_preped=" + previsaoentrega_preped
				+ ", numpedcliente_preped=" + numpedcliente_preped
				+ ", datapedcliente_preped=" + datapedcliente_preped
				+ ", arquivo_preped=" + arquivo_preped + ", datarecep_preped="
				+ datarecep_preped + ", japrint_preped=" + japrint_preped
				+ ", codigo_condfat=" + codigo_condfat + ", codigo_tabven="
				+ codigo_tabven + "]";
	}
	
	

}

ITEMPREPEDIDOVENDA:

package entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class ItemPrePedidoVenda {
	@Id
	@Column
	private Integer id_artcolcorfun;
	@Column
	private Double  quantpedido_itempreped;
	@Column
	private Double  quantatendido_itempreped;
	@Column
	private String  situacao_itempreped;
	@Column
	private Integer numitem_pedcliente;
	@Column
	private Double  preco_itempreped;
	
	@ManyToOne
	@JoinColumn(name="numero_preped")
	private PrePedidoVenda prepedidovenda;
	
	public ItemPrePedidoVenda(Integer id_artcolcorfun,
			Double quantpedido_itempreped, Double quantatendido_itempreped,
			String situacao_itempreped, Integer numitem_pedcliente,
			Double preco_itempreped) {
		super();
		this.id_artcolcorfun = id_artcolcorfun;
		this.quantpedido_itempreped = quantpedido_itempreped;
		this.quantatendido_itempreped = quantatendido_itempreped;
		this.situacao_itempreped = situacao_itempreped;
		this.numitem_pedcliente = numitem_pedcliente;
		this.preco_itempreped = preco_itempreped;
	}

	public ItemPrePedidoVenda() {
		super();
	}

	public PrePedidoVenda getPrepedidovenda() {
		return prepedidovenda;
	}

	public void setPrepedidovenda(PrePedidoVenda prepedidovenda) {
		this.prepedidovenda = prepedidovenda;
	}

	public Integer getId_artcolcorfun() {
		return id_artcolcorfun;
	}

	public void setId_artcolcorfun(Integer id_artcolcorfun) {
		this.id_artcolcorfun = id_artcolcorfun;
	}

	public Double getQuantpedido_itempreped() {
		return quantpedido_itempreped;
	}

	public void setQuantpedido_itempreped(Double quantpedido_itempreped) {
		this.quantpedido_itempreped = quantpedido_itempreped;
	}

	public Double getQuantatendido_itempreped() {
		return quantatendido_itempreped;
	}

	public void setQuantatendido_itempreped(Double quantatendido_itempreped) {
		this.quantatendido_itempreped = quantatendido_itempreped;
	}

	public String getSituacao_itempreped() {
		return situacao_itempreped;
	}

	public void setSituacao_itempreped(String situacao_itempreped) {
		this.situacao_itempreped = situacao_itempreped;
	}

	public Integer getNumitem_pedcliente() {
		return numitem_pedcliente;
	}

	public void setNumitem_pedcliente(Integer numitem_pedcliente) {
		this.numitem_pedcliente = numitem_pedcliente;
	}

	public Double getPreco_itempreped() {
		return preco_itempreped;
	}

	public void setPreco_itempreped(Double preco_itempreped) {
		this.preco_itempreped = preco_itempreped;
	}

	@Override
	public String toString() {
		return "ItemPrePedidoVenda [id_artcolcorfun=" + id_artcolcorfun
				+ ", quantpedido_itempreped=" + quantpedido_itempreped
				+ ", quantatendido_itempreped=" + quantatendido_itempreped
				+ ", situacao_itempreped=" + situacao_itempreped
				+ ", numitem_pedcliente=" + numitem_pedcliente
				+ ", preco_itempreped=" + preco_itempreped + "]";
	}

}

Bom dia.

Já que você está iniciando no java agora, me dou o direito de te indicar o Facelets, uma fez que você já partiu para o JSF, é interessante usar Facelets no lugar do jsp.

Não tive tempo de analisar seu código, mas se é master detail, basicamente você tem que colocar essa lista, depois abrir algo como um dialog, ou outra pagina com o detail, onde o pedido fica no topo como readOnly e os itens em uma lista.

Bom dia Amauri, valeu pela atenção.

Então, estou fazendo um treinamento java e ainda não cheguei em Facelets, mas faz parte do curso! Mas eu gostaria de fazer isto funcionar com Richfaces, me parece algo trivial (pelo menos é com Delphi que é onde sou especialista). Quero clicar em um registro e abrir seu detalhamenbto em uma grid abaixo, na mesma tela.

Itamar G. Jr.
Analista de Sistemas Sr
Werner Tecidos S/A
itamar.gjr!@gmail.com

Consegui implementar?