Martes, 15 Julio 2014 01:37

Cargar tabla datatable Icefaces mas paginación

Escrito por 
Valora este artículo
(0 votos)

En este post cambiaremos nuestro Datatable jsf estándar a un Datatable de Icefaces, al cambiar nuestro  datatable podremos implementar fácilmente la paginación real, es decir que solo  nos traiga los registros de la base de datos que  pedimos en la paginación, ademas tambien estara incluida toda la actualizacion a la correspondiente a la  Base de Datos MySql. En post siguientes iremos implementando nuevas funcionalidades ajax al mismo, por ahora realizaremos la conversión a icefaces e incluiremos la paginación.

Nos basamos en el siguiente post

Y también en el ultimo

A continuación listaremos nuevamente los archivos necesarios para este post.
En primer lugar tenemos la clase Lista,  ya explicada en los posts  anteriores.

  1. import com.icesoft.faces.component.ext.HtmlDataTable;
  2. import com.icesoft.faces.component.ext.HtmlInputText;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.ArrayList;
  6. import java.util.Date;
  7. import javax.faces.application.FacesMessage;
  8. import javax.faces.component.UIComponent;
  9. import javax.faces.context.FacesContext;
  10. import javax.faces.validator.ValidatorException;
  11. import persistencia.*;
  12.  
  13. public class Lista {
  14.  
  15.     private String txtNombre;
  16.     private String txtApellido;
  17.     private String txtDireccion;
  18.     private String txtMail;
  19.     private Date txtFechaNac;
  20.     private double txtSueldoBas;
  21.     private int txtSectorEmpr;
  22.     private ArrayList<Persona> lista = new ArrayList<Persona>() {
  23.     };
  24.     private HtmlInputText nombre;
  25.     private HtmlInputText apellido;
  26.     private HtmlInputText direccion;
  27.     private HtmlInputText mail;
  28.     private HtmlInputText fechaNac;
  29.     private HtmlInputText sueldoBas;
  30.     private HtmlInputText sectorEmpr;
  31.     private HtmlDataTable tabla;
  32.     private Persona persona;
  33.     PersonaJpaController controlador;
  34.     SimpleDateFormat fecha = new SimpleDateFormat("dd/MM/yyyy");
  35.  
  36.     public Lista() {
  37.         persona = new Persona();
  38.         controlador = new PersonaJpaController();
  39.         cargarTabla();
  40.     }
  41.  
  42.     public void cargarTabla() {
  43.         lista = (ArrayList<Persona>) controlador.findPersonaEntities();
  44.     }
  45.  
  46.     public void limpiarCampos() {
  47.         this.nombre.resetValue();
  48.         this.apellido.resetValue();
  49.         this.direccion.resetValue();
  50.         this.mail.resetValue();
  51.         this.fechaNac.resetValue();
  52.         this.sectorEmpr.resetValue();
  53.         this.sueldoBas.resetValue();
  54.     }
  55.  
  56.     public void cargarLista() {
  57.         persona = new Persona();
  58.         persona.setNombre(txtNombre);
  59.         persona.setApellido(txtApellido);
  60.         persona.setDireccion(txtDireccion);
  61.         persona.setFechaNacimiento(fecha.format(txtFechaNac));
  62.         persona.setSectorEmpresa(txtSectorEmpr);
  63.         persona.setSueldoBasico(txtSueldoBas);
  64.         persona.setMail(txtMail);
  65.         controlador.create(persona);
  66.         cargarTabla();
  67.         limpiarCampos();
  68.     }
  69.  
  70.     public void seleccionLista() throws ParseException {
  71.         limpiarCampos();
  72.         persona = (Persona) tabla.getRowData();
  73.         this.txtApellido = persona.getApellido();
  74.         this.txtNombre = persona.getNombre();
  75.         this.txtDireccion = persona.getDireccion();
  76.         this.txtMail = persona.getMail();
  77.         this.txtSectorEmpr = persona.getSectorEmpresa();
  78.         this.txtSueldoBas = persona.getSueldoBasico();
  79.         this.txtFechaNac = fecha.parse(persona.getFechaNacimiento());
  80.     }
  81.  
  82.     public void eliminarLista() {
  83.         try {
  84.             controlador.destroy(persona.getId());
  85.             cargarTabla();
  86.             limpiarCampos();
  87.  
  88.         } catch (Exception e) {
  89.             System.out.println(e);
  90.         }
  91.     }
  92.  
  93.     public void modificarLista() {
  94.         persona.setNombre(txtNombre);
  95.         persona.setApellido(txtApellido);
  96.         persona.setDireccion(txtDireccion);
  97.         persona.setFechaNacimiento(fecha.format(txtFechaNac));
  98.         persona.setSectorEmpresa(txtSectorEmpr);
  99.         persona.setSueldoBasico(txtSueldoBas);
  100.         persona.setMail(txtMail);
  101.         try {
  102.             controlador.edit(persona);
  103.         } catch (Exception e) {
  104.             System.out.println(e);
  105.         }
  106.     }
  107.  
  108.     public HtmlDataTable getTabla() {
  109.         return tabla;
  110.     }
  111.  
  112.     public void setTabla(HtmlDataTable tabla) {
  113.         this.tabla = tabla;
  114.     }
  115.  
  116.     public ArrayList<Persona> getLista() {
  117.         return lista;
  118.     }
  119.  
  120.     public void setLista(ArrayList<Persona> lista) {
  121.         this.lista = lista;
  122.     }
  123.  
  124.     public String getTxtApellido() {
  125.         return txtApellido;
  126.     }
  127.  
  128.     public void setTxtApellido(String txtApellido) {
  129.         this.txtApellido = txtApellido;
  130.     }
  131.  
  132.     public String getTxtDireccion() {
  133.         return txtDireccion;
  134.     }
  135.  
  136.     public void setTxtDireccion(String txtDireccion) {
  137.         this.txtDireccion = txtDireccion;
  138.     }
  139.  
  140.     public String getTxtNombre() {
  141.         return txtNombre;
  142.     }
  143.  
  144.     public void setTxtNombre(String txtNombre) {
  145.         this.txtNombre = txtNombre;
  146.     }
  147.  
  148.     public Date getTxtFechaNac() {
  149.         return txtFechaNac;
  150.     }
  151.  
  152.     public void setTxtFechaNac(Date txtFechaNac) {
  153.         this.txtFechaNac = txtFechaNac;
  154.     }
  155.  
  156.     public int getTxtSectorEmpr() {
  157.         return txtSectorEmpr;
  158.     }
  159.  
  160.     public void setTxtSectorEmpr(int txtSectorEmpr) {
  161.         this.txtSectorEmpr = txtSectorEmpr;
  162.     }
  163.  
  164.     public double getTxtSueldoBas() {
  165.         return txtSueldoBas;
  166.     }
  167.  
  168.     public void setTxtSueldoBas(double txtSueldoBas) {
  169.         this.txtSueldoBas = txtSueldoBas;
  170.     }
  171.  
  172.     public String getTxtMail() {
  173.         return txtMail;
  174.     }
  175.  
  176.     public void setTxtMail(String txtMail) {
  177.         this.txtMail = txtMail;
  178.     }
  179.  
  180.     public HtmlInputText getApellido() {
  181.         return apellido;
  182.     }
  183.  
  184.     public void setApellido(HtmlInputText apellido) {
  185.         this.apellido = apellido;
  186.     }
  187.  
  188.     public HtmlInputText getDireccion() {
  189.         return direccion;
  190.     }
  191.  
  192.     public void setDireccion(HtmlInputText direccion) {
  193.         this.direccion = direccion;
  194.     }
  195.  
  196.     public HtmlInputText getFechaNac() {
  197.         return fechaNac;
  198.     }
  199.  
  200.     public void setFechaNac(HtmlInputText fechaNac) {
  201.         this.fechaNac = fechaNac;
  202.     }
  203.  
  204.     public HtmlInputText getMail() {
  205.         return mail;
  206.     }
  207.  
  208.     public void setMail(HtmlInputText mail) {
  209.         this.mail = mail;
  210.     }
  211.  
  212.     public HtmlInputText getNombre() {
  213.         return nombre;
  214.     }
  215.  
  216.     public void setNombre(HtmlInputText nombre) {
  217.         this.nombre = nombre;
  218.     }
  219.  
  220.     public HtmlInputText getSueldoBas() {
  221.         return sueldoBas;
  222.     }
  223.  
  224.     public void setSueldoBas(HtmlInputText sueldoBas) {
  225.         this.sueldoBas = sueldoBas;
  226.     }
  227.  
  228.     public HtmlInputText getSectorEmpr() {
  229.         return sectorEmpr;
  230.     }
  231.  
  232.     public void setSectorEmpr(HtmlInputText sectorEmpr) {
  233.         this.sectorEmpr = sectorEmpr;
  234.     }
  235.  
  236.     public void validaMail(FacesContext fc, UIComponent uic, Object o) {
  237.         //convertimos a string
  238.         String strValue = String.valueOf(o);
  239.         //verificamos el mail por una expresion regular
  240.         if (!strValue.matches(".+@.+\\.[a-z]+")) {
  241.             //si noes valido lanzamos una excepsion con un mensaje
  242.             throw new ValidatorException(new FacesMessage("Formato de mail incorrecto"));
  243.         }
  244.     }
  245. }

 

A la clase anterior le agregamos las siguientes propiedades que son necesarios para poder resetear nuestros inputtext.

  1.     private HtmlInputText nombre;
  2.     private HtmlInputText apellido;
  3.     private HtmlInputText direccion;
  4.     private HtmlInputText mail;
  5.     private HtmlInputText fechaNac;
  6.     private HtmlInputText sueldoBas;
  7.     private HtmlInputText sectorEmpr;
  8.     private HtmlDataTable tabla;

También agregamos el siguiente método

  1. public void limpiarCampos() {
  2.         this.nombre.resetValue();
  3.         this.apellido.resetValue();
  4.         this.direccion.resetValue();
  5.         this.mail.resetValue();
  6.         this.fechaNac.resetValue();
  7.         this.sectorEmpr.resetValue();
  8.         this.sueldoBas.resetValue();
  9.     }
  10.  

El método anterior es necesario para resetear todos los inputtext a los valores iniciales, sobre todo a la hora de la validación, ya que si aparece un mensaje de  validación nos deje seleccionar de la  tabla otro registro dejando de lado el mensaje, de otro modo no nos dejaría seleccionar ningún otro registro.
También incluiremos nuestro archivo error.properties

  1. # TO CHANGE this template, choose Tools | Templates
  2. # AND open the template IN the editor.
  3. javax.faces.component.UIInput.REQUIRED="Campo obligatorio"
  4. javax.faces.validator.DoubleRangeValidator.MAXIMUM =  El valor debe ser inferior a "{0}"
  5. javax.faces.validator.DoubleRangeValidator.MINIMUM =  El valor debe ser superior a "{0}"
  6. javax.faces.validator.DoubleRangeValidator.NOT_IN_RANGE = El valor no se encuentra en el rango entre {0} y {1}.
  7. javax.faces.validator.DoubleRangeValidator.TYPE = El valor no es del tipo correcto
  8. javax.faces.validator.LengthValidator.MAXIMUM =El valor debe ser inferior a "{0}" caracteres
  9. javax.faces.validator.LengthValidator.MINIMUM = El valor debe ser superior a "{0}" caracteres
  10. javax.faces.validator.LongRangeValidator.MAXIMUM = El valor debe ser inferior a ''{0}''
  11. javax.faces.validator.LongRangeValidator.MINIMUM = El valor debe ser superior a ''{0}''
  12. javax.faces.validator.LongRangeValidator.NOT_IN_RANGE = El valor no se encuentra en el rango entre {0} y {1}.
  13. javax.faces.validator.LongRangeValidator.TYPE = El valor no es del tipo correcto.
  14. javax.faces.converter.DateTimeConverter.DATE = ''{0}'' No es un formato valido de fecha, ejemplo 22/02/1986.
  15. javax.faces.converter.DoubleConverter.DOUBLE = ''{0}'' No es un numero decimal válido.
  16. javax.faces.converter.IntegerConverter.INTEGER = ''{0}'' No numero entero valido.

El archivo de configuración facesconfig.xml

  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!-- =========== FULL CONFIGURATION FILE ================================== -->
  3. <faces-config version="2.0"
  4.    xmlns="http://java.sun.com/xml/ns/javaee"
  5.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
  7. <managed-bean>
  8.   <managed-bean-class>Lista</managed-bean-class>
  9.   <managed-bean-name>lista</managed-bean-name>
  10.   <managed-bean-scope>session</managed-bean-scope>
  11. </managed-bean>
  12. <application>
  13.   <message-bundle>error</message-bundle>
  14. </application>
  15. </faces-config>

En el post anterior creamos nuestro primer proyecto Icefaces que por defecto nos creo el archivo welcomeICEfaces.xhtml  para que se ejecute en primer lugar, lo que haremos ahora es crear un archivo xhtml pero de nombre index.xhtml  para que se ejecute en primer lugar. Lo creamos y agregamos las siguientes líneas

  1. <?xml version='1.0' encoding='UTF-8' ?>
  2. <!--
  3.    Document   : welcomeICEfaces
  4.    Created on : 03/05/2011, 21:23:13
  5.    Author     : RAFAEL
  6. -->
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  8. <html xmlns="http://www.w3.org/1999/xhtml"
  9.      xmlns:ui="http://java.sun.com/jsf/facelets"
  10.      xmlns:f="http://java.sun.com/jsf/core"
  11.      xmlns:h="http://java.sun.com/jsf/html"
  12.      xmlns:icecore="http://www.icefaces.org/icefaces/core"
  13.      xmlns:ace="http://www.icefaces.org/icefaces/components"
  14.      xmlns:ice="http://www.icesoft.com/icefaces/component"
  15.      >
  16.     <h:head>
  17.         <title>Compujuy..</title>
  18.         <link rel="stylesheet" type="text/css" href="./xmlhttp/css/rime/rime.css"/>
  19.     </h:head>
  20.     <h:body styleClass="ice-skin-rime">
  21.         <ice:form  >
  22.             <ice:dataTable   rows="2" value="#{lista.lista}" var="lis" binding="#{lista.tabla}" id="tabla" >
  23.             <h:column>
  24.                 <f:facet name="header">
  25.                     <ice:outputText value="NOMBRE"/>
  26.                 </f:facet>
  27.                 <ice:outputText value="#{lis.nombre}"/>
  28.             </h:column>
  29.             <h:column>
  30.                 <f:facet name="header">
  31.                     <ice:outputText value="APELLIDO"/>
  32.                 </f:facet>
  33.                 <ice:outputText value="#{lis.apellido}"/>
  34.             </h:column>
  35.             <h:column>
  36.                 <f:facet name="header">
  37.                     <ice:outputText value="DIRECCION"/>
  38.                 </f:facet>
  39.                 <ice:outputText value="#{lis.direccion}"/>
  40.             </h:column>
  41.             <h:column>
  42.                 <f:facet name="header">
  43.                     <ice:outputText value="FECHA. DE NAC"/>
  44.                 </f:facet>
  45.                 <ice:outputText value="#{lis.fechaNacimiento}"/>
  46.             </h:column>
  47.             <h:column>
  48.                 <f:facet name="header">
  49.                     <ice:outputText value="SUELDO BAS."/>
  50.                 </f:facet>
  51.                 <ice:outputText value="#{lis.sueldoBasico}"/>
  52.             </h:column>
  53.             <h:column>
  54.                 <f:facet name="header">
  55.                     <ice:outputText value="SECTOR DE EMP."/>
  56.                 </f:facet>
  57.                 <ice:outputText value="#{lis.sectorEmpresa}"/>
  58.             </h:column>
  59.             <h:column >
  60.                 <f:facet  name="header">
  61.                     <ice:outputText value="MAIL"/>
  62.                 </f:facet>
  63.                 <ice:outputText value="#{lis.mail}"/>
  64.             </h:column>
  65.             <h:column>
  66.              <f:facet name="header">
  67.                     <ice:outputText value="SELECCION"/>
  68.              </f:facet>
  69.                 <ice:commandLink partialSubmit="true"  action="#{lista.seleccionLista}">
  70.                 SELECCION
  71.               </ice:commandLink>
  72.             </h:column>
  73.         </ice:dataTable>
  74.             <ice:dataPaginator id="paginador"
  75.                                   for="tabla"
  76.                                   paginator="true"
  77.                                   fastStep="2"
  78.                                   paginatorMaxPages="4">
  79.                     <f:facet name="first">
  80.                         <ice:graphicImage
  81.                            url="./xmlhttp/css/xp/css-images/arrow-first.gif"
  82.                            style="border:none;"
  83.                            title="Primer pagina"/>
  84.                     </f:facet>
  85.                     <f:facet name="last">
  86.                         <ice:graphicImage
  87.                            url="./xmlhttp/css/xp/css-images/arrow-last.gif"
  88.                            style="border:none;"
  89.                            title="Ultima Pagina"/>
  90.                     </f:facet>
  91.                     <f:facet name="previous">
  92.                         <ice:graphicImage
  93.                            url="./xmlhttp/css/xp/css-images/arrow-previous.gif"
  94.                            style="border:none;"
  95.                            title="Pagina Anterior"/>
  96.                     </f:facet>
  97.                     <f:facet name="next">
  98.                         <ice:graphicImage
  99.                            url="./xmlhttp/css/xp/css-images/arrow-next.gif"
  100.                            style="border:none;"
  101.                            title="Proxima Pagina"/>
  102.                     </f:facet>
  103.                     <f:facet name="fastforward">
  104.                         <ice:graphicImage url="./xmlhttp/css/xp/css-images/arrow-ff.gif"
  105.                                          style="border:none;"
  106.                                          title="Adelantar"/>
  107.                     </f:facet>
  108.                     <f:facet name="fastrewind">
  109.                         <ice:graphicImage url="./xmlhttp/css/xp/css-images/arrow-fr.gif"
  110.                                          style="border:none;"
  111.                                          title="Atrasar"/>
  112.                     </f:facet>
  113.                 </ice:dataPaginator>
  114.        </ice:form>
  115.         <ice:form >
  116.             <ice:outputLabel  for="nombre"> Nombre </ice:outputLabel>
  117.             <ice:inputText  id="nombre" required="true" value="#{lista.txtNombre}" binding="#{lista.nombre}">
  118.                 <f:validateLength  minimum="3" maximum="30"/></ice:inputText>
  119.             <ice:message for="nombre"></ice:message><br></br>
  120.             <ice:outputLabel for="apellido"> Apellido </ice:outputLabel>
  121.             <ice:inputText  id="apellido" required="true" value="#{lista.txtApellido}" binding="#{lista.apellido}">
  122.                 <f:validateLength minimum="3" maximum="30"/></ice:inputText>
  123.             <ice:message  for="apellido"></ice:message><br></br>
  124.             <ice:outputLabel for="direccion"> Direccion </ice:outputLabel>
  125.             <ice:inputText  id="direccion" required="true" value="#{lista.txtDireccion}" binding="#{lista.direccion}">
  126.                 <f:validateLength minimum="3" maximum="50"/></ice:inputText>
  127.             <ice:message  for="direccion"></ice:message><br></br>
  128.             <ice:outputLabel for="mail"> Mail </ice:outputLabel>
  129.             <ice:inputText  id="mail" required="true" validator="#{lista.validaMail}" value="#{lista.txtMail}" binding="#{lista.mail}" >
  130.             </ice:inputText>
  131.             <ice:message  for="mail"></ice:message><br></br>
  132.             <ice:outputLabel for="feciceaNac"> Fecha de Nac. </ice:outputLabel>
  133.             <ice:inputText  id="fechaNac"  required="true" value="#{lista.txtFechaNac}" binding="#{lista.fechaNac}">
  134.                 <f:convertDateTime pattern="dd/MM/yyyy"/></ice:inputText>
  135.             <ice:message  for="fechaNac"></ice:message><br></br>
  136.             <ice:outputLabel for="sectorEmpr"> Sector de la Empresa </ice:outputLabel>
  137.             <ice:inputText  id="sectorEmpr" required="true" value="#{lista.txtSectorEmpr}" binding="#{lista.sectorEmpr}">
  138.                 <f:validateLongRange minimum="0" maximum="11"/></ice:inputText>
  139.             <ice:message  for="sectorEmpr"></ice:message><br></br>
  140.             <ice:outputLabel id="te" for="sueldoBasico"> Sueldo Basico </ice:outputLabel>
  141.             <ice:inputText  id="sueldoBasico" required="true" converter="#{Double}" value="#{lista.txtSueldoBas}" binding="#{lista.sueldoBas}">
  142.                 <f:validateDoubleRange minimum="0" maximum="5000"/> </ice:inputText>
  143.             <ice:message   for="sueldoBasico"></ice:message><br></br><br></br>
  144.             <ice:commandButton value="Agregar" id="agregar"  action="#{lista.cargarLista}"></ice:commandButton>
  145.             <ice:commandButton value="Modificar" action="#{lista.modificarLista}"></ice:commandButton>
  146.             <ice:commandButton value="Eliminar" action="#{lista.eliminarLista}"></ice:commandButton>
  147.         </ice:form>
  148.  
  149.     </h:body>
  150. </html>

Ahora para que se ejecute este archivo en primer lugar realizamos los siguientes pasos, nos ubicamos sobre el proyecto le damos click derecho sobre propiedades y nos aparece la siguiente  ventana


Sobre run cambiamos el campo Relative url,  que anteriormente estaba con welcomeIcefaces.jsf por index.jsf, lo hacemos como lo muestra la imagen para que lo primero que se ejecute sea el index


Reiniciamos el  servidor, en mi caso Glassfish, para que tome los cambios realizados.


Ahora brevemente por cuestiones de tiempo explicare las líneas cambiadas al index.xhtml de los post anteriores
Para empezar se cambio todos los tags que anteriormente pertenecían a la librería de jsf, por los tags pertenecientes a icefaces, como por ejemplo, en los posts anteriores teníamos
<h:datatable>
Ahora tenemos
<ice:datatable>
Este cambio se hizo a todos los componentes, otro cambio importante es el de la incorporación de la paginación, mediante el siguiente componente de icefaces
<ice:dataPaginator id="paginador"
 </ice:dataPaginator>
En donde para el <ice:dataPaginator> tenemos las siguientes propiedades

  • id="paginador"  - establece el id del componente
  • for="tabla" – a que tabla se le realize la paginación, osea el id de la tabla
  •  paginator="true"  - si esta active la paginacion, en este caso en true.
  • fastStep="2" – numero de fila a mostrar par alas tablas
  • paginatorMaxPages="4" – maximo de paginas a mostrar en la paginacion.

Luego dentro del dataPaginator tenemos, un componente de faces core, que nos define el aspecto que va a tener nuestra paginacion
<f:facet name="fastrewind">
<ice:graphicImage
url="./xmlhttp/css/xp/css-images/arrow-first.gif"  --
la imagen que tendra en este caso el link de primera pagina
style="border:none;"  --aqui le podemos agregar estilo adicional que querramos
title="Primera pagina"/>    -- y por ultimo el titulo o tooltiptext que tendra           
  </f:facet>

Por otra parte a todos los inputtext le agregamos la propiedad de binding, para poder accesarlos desde la clase lista y poder reserearlos

  <ice:inputText  id="nombre" required="true" value="#{lista.txtNombre}" binding="#{lista.nombre}">

En la linea anterior al inputtext nombre lo accedemos desde la clase lista mediante la propiedad nombre propiamente dicha.
Por ultimo  también le agregamos la propiedad partialSubmit="true"  ,para el commandlink, esta es necesaria para poder ejecutar el mismo en caso de que una validación surga y no nos deje hacerlo, osea seria un envio parcial, esto es específicamente para la hora en que aparezca una validación, sin esta propiedad en caso de que nos aparezca un mensaje de validación para los campos de entrada el command link no tendría ningún efecto.
 

<ice:commandLink partialSubmit="true"  action="#{lista.seleccionLista}">

Esos son las cambios mas importantes realizados a nuestro post
CARGAR TABLA DATATABLE JSF DESDE UNA BASE DE DATOS MYSQL
Antes de ponerlo a prueba no nos olvidemos de incluir nuestro proyecto de persistencia como lo hicimos en el post
CARGAR TABLA DATATABLE JSF DESDE UNA BASE DE DATOS MYSQL
También no olvidemos de incluir las librerías necesarias para poder correlo en este caso las que muestran la siguiente imagen

El árbol del proyecto queda de la siguiente manera

Las librerías son las siguientes

No olvidemos  también  tener el Mysql corriendo.
Si tenemos todos los pasos realizados estamos en condiciones de poder ejecutar nuestro proyecto Icefaces de actualización de registros, lo ejecutamos y el resultado debería ser el siguiente:

Como lo muestra la imagen ya tenemos incluida la paginación a nuestro anterior ejemplo jsf, además todos los cambios se reflejan en una base de datos Mysql.
Bueno eso ha sido todo por ahora, cualquier duda dejen su comentario, hasta pronto.

Visto 1141 veces

Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el código HTML. Tu dirección de correo NO será publicada.