Ing. Pablo Almeida Haro Msc.
ICEFACES
ICEFACES USANDO JPA Y SQL NATIVOS
*Ingresar a Netbeans
*Crear un nuevo proyecto: file /new/Project/web aplication
*Colocar el nombre del proyecto y ubicación
*Especificar el servidor, la versión de JEE y la ruta de arranque
*Seleccionar el framework a utilizar, para nuestro caso icefaces
*El ide desplegará la página de inicio (welcomeICEfaces.xhtml).
*El presente ejemplo funciona utilizando JPA como capa de persistencia. Para configurarla seguimos los siguientes pasos: click derecho sobre el proyecto/new/other/persistence/persistence_unit. Ingresamos los siguientes campos y colocamos click en finish:
*Editar la página welcomeICEfaces.xhtml con el código necesario para presentar un formulario con los campos código y nombre con sus respectivas etiquetas como sigue a continuación:
<?xml version='1.0' encoding='UTF-8' ?>
<!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://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:icecore="http://www.icefaces.org/icefaces/core"
xmlns:ace="http://www.icefaces.org/icefaces/components"
xmlns:ice="http://www.icesoft.com/icefaces/component"
>
<h:head>
<title>ICEfaces 2</title>
<link rel="stylesheet" type="text/css" href="./xmlhttp/css/rime/rime.css"/>
</h:head>
<h:body>
<div id="header">
<!--
<ui:include src="/header.xhtml" >
<ui:param name="param_name" value="param_value" />
</ui:include>
-->
</div>
<div id="content">
<ice:form id="form">
<ice:outputText value="CLIENTES"/>
<br></br><br></br>
<ice:outputText value="Código:"/>
<ice:inputText id="codigo" value="#{cliente.codigo}" />
<br></br>
<ice:outputText value="Nombre:"/>
<ice:inputText id="nombre" value="#{cliente.nombre}"/>
<br></br><br></br>
<ice:commandButton id="insertar" value="Insertar" action="#{cliente.insertar}"> </ice:commandButton>
<ice:commandButton id="eliminar" value="Eliminar" action="#{cliente.eliminar}" > </ice:commandButton>
<ice:commandButton id="modificar" value="Modificar" action="#{cliente.modificar}"> </ice:commandButton>
<ice:commandButton id="buscar" value="Buscar" action="#{cliente.buscar}"> </ice:commandButton>
<br></br><br></br>
<ice:outputText value="#{cliente.mensaje}"/>
</ice:form>
</div>
</h:body>
</html>
*Crear un paquete: click derecho sobre source package/new java package
*Colocar el nombre del paquete
*Dentro del paquete crear un javabean: click derecho sobre el paquete/new/java class
*Colocar el nombre de la clase y el paquete donde se alojará
*Editar el código de la clase como sigue a continuación:
package pkg_icefaces_crud;
import java.util.List;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
@ManagedBean()
@SessionScoped
public class cliente
{ public String codigo="";
public String nombre="";
public String mensaje="";
EntityManagerFactory factory=Persistence.createEntityManagerFactory("prj_icefaces_crudPU2");
EntityManager em1=factory.createEntityManager();
public cliente ()
{
}
public String getcodigo() {
return codigo;
}
public void setcodigo(String as_codigo) {
this.codigo = as_codigo;
}
public String getnombre() {
return nombre;
}
public void setnombre(String as_nombre) {
this.nombre = as_nombre;
}
public String getmensaje() {
return mensaje;
}
public void setmensaje(String as_mensaje) {
this.mensaje = as_mensaje;
}
public void insertar()
{
String sql ="insert into cliente (codigo,nombre) values ('"+codigo+"'"+","+"'"+nombre+"')";
em1.getTransaction().begin();
Query qe=em1.createNativeQuery(sql);
try
{
qe.executeUpdate();
em1.getTransaction().commit();
mensaje="Se insertó satisfactoriamente";
}
catch (Exception ex)
{ em1.getTransaction().rollback();
mensaje="No se pudo insertar";
}
}
public void eliminar()
{
String sql ="delete from cliente where codigo='"+codigo+"'";
em1.getTransaction().begin();
Query qe=em1.createNativeQuery(sql);
int li_filas= qe.executeUpdate();
if (li_filas>=1)
{
em1.getTransaction().commit();
mensaje="Se eliminó satisfactoriamente";
}
else
{
em1.getTransaction().rollback();
mensaje="No se pudo eliminar";
}
}
public void modificar()
{
String sql ="update cliente set nombre='"+nombre+"' where codigo='"+codigo+"'";
em1.getTransaction().begin();
Query qe=em1.createNativeQuery(sql);
int li_filas=qe.executeUpdate();
if (li_filas>=1)
{
em1.getTransaction().commit();
mensaje="Se actualizó satisfactoriamente";
}
else
{
em1.getTransaction().rollback();
mensaje="No se pudo modificar";
}
}
public void buscar()
{
String sql ="select * from cliente where codigo="+"'"+codigo+"'";
Query qe=em1.createNativeQuery(sql);
List l1=qe.getResultList();
if (l1.size()>=1)
{
Object [] ar_objeto=(Object [])(l1.get(0));
String ls_nombre=ar_objeto[1].toString();
nombre=ls_nombre;
mensaje="";
}
else
{
mensaje="No se encontró el cliente";
}
}
}
*Una vez que el código se encuentra completo, click derecho sobre el proyecto/run. Se presentará el siguiente resultado:
ICEFACES USANDO CACHEDROWSETS Y PERSISTENCIA PROPIA
CREACION DEL POOL DE CONEXIONES
*Como requisito: crear la base de datos y la tabla cliente en la ficha prestaciones/databases. Se puede crear la tabla dentro de la base de datos sample
*Crear el pool de conexiones: Ingresar al administrador del servidor glassfish, en netbeans/ficha services(prestaciones), click derecho sobre el servidor glassfish/view admin console
*Ingresar el usuario y clave del servidor (solo si no ingresa por defecto)
*En el árbol navegar hacia recursos/jdbc/conjuntos de conexiones/click en nuevo. Ingresar la información que sigue a continuación
*Colocar click en siguiente
*Ingresar los parámetros de conexión como sigue a continuación:
*Click en finalizar
*Click en el nuevo conjunto de conexión/click en sondeo
*Crear el recurso jdbc: En el árbol, navegar hacia recursos/jdbc/recursos jdbc/click en nuevo
*Anotar el nombre JNDI. Este será utilizado más adelante en la codificación
Colocar click en guardar
CREACION DEL PROYECTO WEB
*En netbeans, seleccionar file/new/Project/java web/ web application
*Ingresar el nombre del proyecto y ubicación
*Seleccionar el servidor, versión de java y dirección de arranque
*Seleccionar el framework icefaces
*En el archivo welcomeicefaces.xhtml colocar el código como sigue a continuación:
<?xml version='1.0' encoding='UTF-8' ?>
<!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://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:icecore="http://www.icefaces.org/icefaces/core"
xmlns:ace="http://www.icefaces.org/icefaces/components"
xmlns:ice="http://www.icesoft.com/icefaces/component"
>
<h:head>
<title>ICEfaces 2</title>
<link rel="stylesheet" type="text/css" href="./xmlhttp/css/rime/rime.css"/>
</h:head>
<h:body>
<f:view>
<ice:form id="form" partialSubmit="true">
<ice:outputText value="CLIENTES"/>
<br></br><br></br>
<ice:outputText id="cod" value="Código:"/>
<ice:inputText id="codigo" value="#{cliente.codigo}" />
<br></br>
<ice:outputText id="nom" value="Nombre:"/>
<ice:inputText id="nombre" value="#{cliente.nombre}"/>
<br></br><br></br>
<ice:commandButton actionListener="#{cliente.insertar}" id="insertar" value="Insertar" partialSubmit="true"> </ice:commandButton>
<ice:commandButton id="eliminar" value="Eliminar" action="#{cliente.eliminar}" partialSubmit="true"> </ice:commandButton >
<ice:commandButton id="modificar" value="Modificar" action="#{cliente.modificar}" partialSubmit="true"> </ice:commandButton>
<ice:commandButton id="buscar" value="Buscar" actionListener="#{cliente.buscar}" partialSubmit="true"> </ice:commandButton>
<br></br><br></br>
<ice:outputText id="mensaje" value="#{cliente.mensaje}" />
<ice:dataTable id="dataTable1" value="#{cliente.icrs_cliente}" var="currentRow">
<ice:column id="column1">
<ice:outputText id="outputText1" value="#{currentRow['codigo']}"/>
<f:facet name="header">
<ice:outputText id="outputText2" value="CODIGO"/>
</f:facet>
</ice:column>
<ice:column id="column2">
<ice:outputText id="outputText3" value="#{currentRow['nombre']}"/>
<f:facet name="header">
<ice:outputText id="outputText4" value="NOMBRE"/>
</f:facet>
</ice:column>
</ice:dataTable>
</ice:form>
</f:view>
</h:body>
<h:outputStylesheet library="org.icefaces.component.skins" name="rime.css" />
</html>
*Creación de una capa de persistencia propia: click derecho en source package/new/java class
*Colocar el código que sigue a continuación:
package pkg_ice_cached;
import com.sun.rowset.CachedRowSetImpl;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.sql.rowset.CachedRowSet;
public class persistencia_cliente {
String is_error="";
public CachedRowSet recuperar_cachedrowset (String as_sql)
{ CachedRowSetImpl lcrs_1;
try
{ lcrs_1=new CachedRowSetImpl();
lcrs_1.setDataSourceName("pool_icefaces");
lcrs_1.setCommand( as_sql);
lcrs_1.execute();
// lcrs_1.close();
}
catch (Exception asex_1)
{
is_error=asex_1.getMessage();
return null;
}
return lcrs_1;
}
}
*Creación del backing bean: click derecho en source package/new/java class
*Colocar el código como sigue a continuación
package pkg_ice_cached;
import com.icesoft.faces.component.ext.HtmlDataTable;
import com.icesoft.faces.component.ext.HtmlOutputText;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.sql.rowset.CachedRowSet;
@ManagedBean()
@SessionScoped
public class cliente
{ public String codigo="";
public String nombre="";
public String mensaje="";
CachedRowSet icrs_cliente;
HtmlDataTable idt_cliente=new HtmlDataTable();
persistencia_cliente ipc_cliente=new persistencia_cliente();
public HtmlDataTable getIdt_cliente() {
return idt_cliente;
}
public void setIdt_cliente(HtmlDataTable adt_cliente) {
this.idt_cliente = adt_cliente;
}
public CachedRowSet getIcrs_cliente() {
return icrs_cliente;
}
public void setIcrs_cliente(CachedRowSet acrs_cliente) {
this.icrs_cliente = acrs_cliente;
}
public cliente () {
icrs_cliente=ipc_cliente.recuperar_cachedrowset("select * from cliente");
}
public String getcodigo() {
return codigo;
}
public void setcodigo(String as_codigo) {
this.codigo = as_codigo;
}
public String getnombre() {
return nombre;
}
public void setnombre(String as_nombre) {
this.nombre = as_nombre;
}
public String getmensaje() {
return mensaje;
}
// public void setmensaje(String as_mensaje) {
// this.mensaje = as_mensaje;
// }
public void insertar()
{
mensaje=" ";
try
{
icrs_cliente.moveToInsertRow();
icrs_cliente.updateString("codigo",codigo);
icrs_cliente.updateString("nombre",nombre);
icrs_cliente.insertRow();
icrs_cliente.moveToCurrentRow();
icrs_cliente.acceptChanges();
mensaje="Se insertó satisfactoriamente";
}
catch (Exception ex)
{ mensaje="No se pudo insertar";
}
}
public void eliminar()
{ mensaje=" ";
try
{ String ls_codigo="";
String ls_nombre="";
int li_filas=icrs_cliente.size();
for (int i=1; i<=li_filas;i++)
{ icrs_cliente.absolute(i);
ls_codigo=icrs_cliente.getString("codigo");
if (ls_codigo.compareTo(codigo)==0)
{
icrs_cliente.deleteRow();
icrs_cliente.acceptChanges();
mensaje="se eliminó satisfactoriamente";
break;
}
}
if (mensaje.compareTo(" ") ==0)
{
mensaje="No se pudo eliminar";
}
}
catch (Exception ex)
{ mensaje="No se pudo eliminar";
}
}
public void modificar()
{mensaje=" ";
try
{ String ls_codigo="";
String ls_nombre="";
int li_filas=icrs_cliente.size();
for (int i=1; i<=li_filas;i++)
{ icrs_cliente.absolute(i);
ls_codigo=icrs_cliente.getString("codigo");
if (ls_codigo.compareTo(codigo)==0)
{
// icrs_cliente.updateString("codigo",codigo);
icrs_cliente.updateString("nombre",nombre);
icrs_cliente.moveToCurrentRow();
icrs_cliente.acceptChanges();
mensaje="se actualizó satisfactoriamente";
break;
}
}
if (mensaje.compareTo(" ") ==0)
{ mensaje="No se pudo actualizar";
}
}
catch (Exception ex)
{ mensaje="No se pudo actualizar";
}
}
public void buscar()
{mensaje=" ";
try
{ String ls_codigo="";
String ls_nombre="";
int li_filas=icrs_cliente.size();
for (int i=1; i<=li_filas;i++)
{ icrs_cliente.absolute(i);
ls_codigo=icrs_cliente.getString("codigo");
ls_nombre=icrs_cliente.getString("nombre");
if (ls_codigo.compareTo(codigo)==0)
{
nombre=ls_nombre;
mensaje="Registro encontrado";
break;
}
}
if (mensaje.compareTo(" ") ==0)
{
mensaje="No se encontró el registro";
}
}
catch (Exception ex)
{ mensaje="No se encontró el registro";
}
}
}
*Correr la aplicación: clic derecho sobre la aplicación/run