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!