Forum Stats

  • 3,839,736 Users
  • 2,262,532 Discussions
  • 7,901,052 Comments

Discussions

Can someone help me with this problem with datatable?

gechenique
gechenique Member Posts: 14 Blue Ribbon
edited Sep 3, 2015 11:51AM in JavaServer Faces

My Primefaces DataTable  only inserts a row, and successive values are entered in the same row, replacing the previous.


The font code of the xhtml file is the following:

<!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:ui="http://xmlns.jcp.org/jsf/facelets"
  xmlns:f="http://xmlns.jcp.org/jsf/core"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:p="http://primefaces.org/ui">

<h:head>
  <title><ui:insert name="title">Default title</ui:insert></title>
</h:head>


<h:body>


    <ui:composition template="./WEB-INF/templates/plantilla.xhtml">
    
    <ui:define name="content" >
   
    <f:event type="preRenderView" listener="#{personaBean.listar('F')}" />
    <f:event type="preRenderView" listener="#{productoBean.listar('F')}" />
   
    <h:form>
    <p:outputLabel value="Persona" />
    <p:selectOneMenu value="#{ventaBean.venta.codPersona}" converter="omnifaces.SelectItemsConverter">
    <f:selectItem noSelectionOption="true" itemLabel="Seleccione" itemValue="#{null}" />
    <f:selectItems value="#{personaBean.lstPersonas}" var="per" itemLabel="#{per.nombre}" itemValue="#{per}" />
    </p:selectOneMenu>
   
    <p:outputLabel value="Producto" />
    <p:selectOneMenu value="#{ventaBean.producto}" converter="omnifaces.SelectItemsConverter">
    <f:selectItem noSelectionOption="true" itemLabel="Seleccione" itemValue="#{null}" />
    <f:selectItems value="#{productoBean.lstProductos}" var="pro" itemLabel="#{pro.nombre}" itemValue="#{pro}" />
    </p:selectOneMenu>
   
    <p:outputLabel value="Cantidad" />
    <p:inputText value="#{ventaBean.cantidad}" />
   
    <p:commandButton value="Agregar" actionListener="#{ventaBean.agregar()}" update="detalle" />
   
    <p:dataTable id="detalle" value="#{ventaBean.lista}" var="det" >
   
    <p:column headerText="Nombre Producto">
        #{det.producto.nombre}
    </p:column>
   
    <p:column headerText="Precio">
         #{det.producto.precio}
    </p:column>
   
    <p:column headerText="Cantidad">
         #{det.cantidad}
    </p:column>
    </p:dataTable>
   
    <p:commandButton value="Registrar Venta" />
   
    </h:form>
   
    </ui:define>
   
    </ui:composition>



</h:body>


</html>


Beans code involved is as follows:


VentaBean:

package com.mitocode.bean;


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


import javax.faces.bean.ManagedBean;
import javax.faces.view.ViewScoped;


import com.mitocode.model.DetalleVenta;
import com.mitocode.model.Producto;
import com.mitocode.model.Venta;


@ManagedBean
@ViewScoped
public class VentaBean implements Serializable{


  /**
  *
  */
  private static final long serialVersionUID = 8142194527616985494L;
  private Venta venta = new Venta();
  private Producto producto = new Producto();
  private int cantidad;
  private List<DetalleVenta> lista = new ArrayList<DetalleVenta>();


  public List<DetalleVenta> getLista() {
  return lista;
  }


  public void setLista(List<DetalleVenta> lista) {
  this.lista = lista;
  }


  public int getCantidad() {
  return cantidad;
  }


  public void setCantidad(int cantidad) {
  this.cantidad = cantidad;
  }


  public Producto getProducto() {
  return producto;
  }


  public void setProducto(Producto producto) {
  this.producto = producto;
  }


  public Venta getVenta() {
  return venta;
  }


  public void setVenta(Venta venta) {
  this.venta = venta;
  }


  public void agregar(){
  DetalleVenta det = new DetalleVenta();
  det.setCantidad(getCantidad());
  det.setProducto(getProducto());
  this.lista.add(det);
  }


}

PersonaBean:

package com.mitocode.bean;




import java.util.List;






import javax.faces.bean.ManagedBean;
//import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.*;


import com.mitocode.dao.PersonaDAO;
import com.mitocode.model.Persona;


@ManagedBean
@ViewScoped
public class PersonaBean {


  private Persona persona = new Persona();
  private List<Persona> lstPersonas;
  private String accion;


  public String getAccion() {
  return accion;
  }


  public void setAccion(String accion) {
  //this.limpiar();
  this.accion = accion;
  }

  private boolean isPostBack(){
  return FacesContext.getCurrentInstance().isPostback();
  }


  public Persona getPersona() {
  return persona;
  }


  public void setPersona(Persona persona) {
  this.persona = persona;
  }

  public void operar(){
  switch(accion){
  case "Registrar":
  this.registrar();
  this.limpiar();
  break;
  case "Modificar":
  this.modificar();
  this.limpiar();
  break;
  }
  }

  private void limpiar(){
  persona.setCodigo(0);
  persona.setNombre("");
  persona.setSexo("");
  }

  private void registrar(){
  PersonaDAO dao;

  try{
  dao = new PersonaDAO();
  dao.registrar(persona);
  this.listar("V");
  }catch(Exception e){
  e.printStackTrace();
  }
  }

  private void modificar(){
  PersonaDAO dao;

  try{
  dao = new PersonaDAO();
  dao.modificar(persona);
  this.listar("V");
  }catch(Exception e){
  e.printStackTrace();
  }
  }


  public void listar(String valor){
  PersonaDAO dao;

  try{
  if(valor.equals("F")){
  if(isPostBack() == false){
  dao = new PersonaDAO();
  lstPersonas = dao.listar();
  }
  }
  else{
  dao = new PersonaDAO();
  lstPersonas = dao.listar();
  }
  }catch(Exception e){
  e.printStackTrace();
  }
  }


  public List<Persona> getLstPersonas() {
  return lstPersonas;
  }


  public void setLstPersonas(List<Persona> lstPersonas) {
  this.lstPersonas = lstPersonas;
  }

  public void leerID(Persona per){
  PersonaDAO dao;
  Persona temp;

  try{
  dao = new PersonaDAO();
  temp = dao.leerID(per);
  if(temp != null){
  this.persona = temp;
  this.setAccion("Modificar");
  }
  }catch(Exception e){
  e.printStackTrace();
  }
  }

  public void eliminar(Persona per){
  PersonaDAO dao;

  try{
  dao = new PersonaDAO();
  dao.eliminar(per);
  this.listar("V");
  }catch(Exception e){
  e.printStackTrace();
  }
  }
}

ProductoBean:

package com.mitocode.bean;




import java.util.List;


import javax.faces.bean.ManagedBean;
//import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.*;


import com.mitocode.dao.*;
import com.mitocode.model.Producto;


@ManagedBean
@ViewScoped
public class ProductoBean {


  private Producto producto = new Producto();
  private List<Producto> lstProductos;
  private String accion;


  public String getAccion() {
  return accion;
  }


  public void setAccion(String accion) {
  //this.limpiar();
  this.accion = accion;
  }


  private boolean isPostBack(){
  return FacesContext.getCurrentInstance().isPostback();
  }

  public Producto getProducto() {
  return producto;
  }


  public void setProducto(Producto producto) {
  this.producto = producto;
  }

  public void operar(){
  switch(accion){
  case "Registrar":
  this.registrar();
  this.limpiar();
  break;
  case "Modificar":
  this.modificar();
  this.limpiar();
  break;
  }
  }

  public void limpiar(){
  producto.setCodigo(0);
  producto.setNombre("");
  producto.setPrecio(0);
  }

  private void registrar(){
  ProductoDAO dao;

  try{
  dao = new ProductoDAO();
  dao.registrar(producto);
  this.listar("V");
  }catch(Exception e){
  e.printStackTrace();
  }
  }

  private void modificar(){
  ProductoDAO dao;

  try{
  dao = new ProductoDAO();
  dao.modificar(producto);
  this.listar("V");
  }catch(Exception e){
  e.printStackTrace();
  }
  }


  public void listar(String valor){
  ProductoDAO dao;

  try{
  if(valor.equals("F")){
  if(isPostBack() == false){
  dao = new ProductoDAO();
  lstProductos = dao.listar();
  }
  }
  else{
  dao = new ProductoDAO();
  lstProductos = dao.listar();
  }
  }catch(Exception e){
  e.printStackTrace();
  }
  }


  public List<Producto> getLstProductos() {
  return lstProductos;
  }


  public void setLstProductos(List<Producto> lstProductos) {
  this.lstProductos = lstProductos;
  }

  public void leerID(Producto pro){
  ProductoDAO dao;
  Producto temp;

  try{
  dao = new ProductoDAO();
  temp = dao.leerID(pro);
  if(temp != null){
  this.producto = temp;
  this.setAccion("Modificar");
  }
  }catch(Exception e){
  e.printStackTrace();
  }
  }

  public void eliminar(Producto pro){
  ProductoDAO dao;

  try{
  dao = new ProductoDAO();
  dao.eliminar(pro);
  this.listar("V");
  }catch(Exception e){
  e.printStackTrace();
  }
  }
}

And finally, the POJO'S:

Venta:

package com.mitocode.model;


import java.util.Date;


public class Venta {


  private int codigo;
  private Date fecha;
  private Persona codPersona;
  private double monto;

  public int getCodigo() {
  return codigo;
  }

  public void setCodigo(int codigo) {
  this.codigo = codigo;
  }

  public Date getFecha() {
  return fecha;
  }

  public void setFecha(Date fecha) {
  this.fecha = fecha;
  }

  public Persona getCodPersona() {
  return codPersona;
  }

  public void setCodPersona(Persona codPersona) {
  this.codPersona = codPersona;
  }

  public double getMonto() {
  return monto;
  }

  public void setMonto(double monto) {
  this.monto = monto;
  }

}

Producto:

package com.mitocode.model;


public class Producto {


  private int codigo;
  private String nombre;
  private double precio;


  @Override
  public String toString() {
  return "Producto [codigo=" + codigo + "]";
  }


  @Override
  public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + codigo;
  return result;
  }


  @Override
  public boolean equals(Object obj) {
  if (this == obj)
  return true;
  if (obj == null)
  return false;
  if (getClass() != obj.getClass())
  return false;
  Producto other = (Producto) obj;
  if (codigo != other.codigo)
  return false;
  return true;
  }






  public int getCodigo() {
  return codigo;
  }


  public void setCodigo(int codigo) {
  this.codigo = codigo;
  }


  public String getNombre() {
  return nombre;
  }


  public void setNombre(String nombre) {
  this.nombre = nombre;
  }


  public double getPrecio() {
  return precio;
  }


  public void setPrecio(double precio) {
  this.precio = precio;
  }


}

Persona:

package com.mitocode.model;


public class Persona {


  private int codigo;
  private String nombre;
  private String sexo;


  @Override
  public String toString() {
  return "Persona [codigo=" + codigo + "]";
  }


  @Override
  public int hashCode() {
  final int prime = 31;
  int result = 1;
  result = prime * result + codigo;
  return result;
  }


  @Override
  public boolean equals(Object obj) {
  if (this == obj)
  return true;
  if (obj == null)
  return false;
  if (getClass() != obj.getClass())
  return false;
  Persona other = (Persona) obj;
  if (codigo != other.codigo)
  return false;
  return true;
  }


  public int getCodigo() {
  return codigo;
  }


  public void setCodigo(int codigo) {
  this.codigo = codigo;
  }


  public String getNombre() {
  return nombre;
  }


  public void setNombre(String nombre) {
  this.nombre = nombre;
  }


  public String getSexo() {
  return sexo;
  }


  public void setSexo(String sexo) {
  this.sexo = sexo;
  }


}

DetalleVenta:

package com.mitocode.model;


public class DetalleVenta {


  private int codigo;
  private Venta venta;
  private Producto producto;
  private int cantidad;

  public int getCodigo() {
  return codigo;
  }

  public void setCodigo(int codigo) {
  this.codigo = codigo;
  }

  public Venta getVenta() {
  return venta;
  }

  public void setVenta(Venta venta) {
  this.venta = venta;
  }

  public Producto getProducto() {
  return producto;
  }

  public void setProducto(Producto producto) {
  this.producto = producto;
  }

  public int getCantidad() {
  return cantidad;
  }

  public void setCantidad(int cantidad) {
  this.cantidad = cantidad;
  }

}

I´m using:

Eclipse Mars (4.5)

Mojarra 2.2.9

Primefaces 5.2

Omnifaces 2.1

Thanks in advance!

A hug for all!

Answers

This discussion has been closed.