Skip to main content

Agregar Registros usando DataProvider

Cuando deseamos agregar registros y verificar si existe algun valor en la tabla, podemos hacerlo de varias maneras:
  • Dejar que la misma base de datos nos envie el mensaje de error y nosotros lo mostramos mediante un messagegroup , este mensaje no es muy explicativo al usuario.
  • La otra verificar si ya existe ese valor dentro del campo de la base de datos y nosotros mismos deplegar el mensaje, de manera mas especifica al usuario.
Usaremos la segunda solución. Debemos tener presente que deseamos buscar un registro con el valor deseado, debemos recordar que si no tenemos registros en la tabla se generara un excepción, con el siguiente mensaje "java.lang.ArrayIndexOutOfBoundsException: -1", tal vez no muy explicativo, pero indica que la tabla no tiene registros, asi que debemos primero verificar que exista algun registro para luego utilizar una instrucción como esta:
aulasRowKey = aulasDataProvider.findFirst("aulas.aula", aulaTextField.getText());
El metodo findFirst encuentra el primer registro en la tabla aulas que cumpla la condición de busqueda. Acontinuación el codigo completo del boton Agregar nuevo registro.

public String saveButton_action() {
// TODO: Procesar la acción de clic de botón. El valor de devolución es un
// nombre de caso de navegación en el que un valor nulo devolverá la misma página.

try {
RowKey aulasRowKey;
int numeroRegistros;
numeroRegistros = aulasDataProvider.getRowCount();
if ( numeroRegistros == 0){
// info("No hay registros de propiedades");
boolean nada;
} else{
boolean ok = true;

aulasRowKey = aulasDataProvider.findFirst("aulas.aula", aulaTextField.getText());
if (aulasRowKey != null) {
error("El aula '"+aulaTextField.getText()+"' ya esta en uso....");
ok = false;
}
if (!ok) {
return null;
}
}

// Asigna el nuevo registro de aula
String tipo = (String) tipodropDown.getSelected();

aulasRowKey = aulasDataProvider.appendRow();
aulasDataProvider.setValue("aulas.aula",aulasRowKey,aulaTextField.getText());
aulasDataProvider.setValue("aulas.edificio",aulasRowKey, edificioTextField.getText());
aulasDataProvider.setValue("aulas.idtipoaula",aulasRowKey, tipo);
aulasDataProvider.setValue("aulas.activo",aulasRowKey, "s");
aulasDataProvider.commitChanges();
info("Se registro el aula");

this.saveButton.setDisabled(true);
} catch (Exception e) {
log("No puede registrar el aula: " , e);
error("No puede registrar el aula " + e);
aulasDataProvider.revertChanges();
}

return null;
}



Estructura de la tabla

aula varchar(35)
edificio` varchar(35)
idtipoaula` varchar(15)
activo varchar(1)

Comments

Mireia said…
He aplicado este código en una aplicación web cuyo objetivo es mostrar los valores del registro al que apunta un userRowKey, que debe ir iterando en base a unos botones Next y Previous.

El problema es que al hacer:

userRowKey = usersDataProvider.findFirst("users.user_id",
textField1.getText());

, el resultado de userRowKey es siempre:

CachedRowSetRowKey[0]

, de modo que userRowKey siempre apunta al primer registro de la base de datos.

He probado a pasarle manualmente el valor de textField1.getText(), que en mi caso debe ser un entero, y entonces sí apunta al CachedRowSetRowKey adecuado. (por ejemplo:

int i=3;
userRowKey = usersDataProvider.findFirst("users.user_id",i);

Pero aunque pase a entero el valor obtenido del textField (Integer.parseint(textField1.getText().toString())), el resultado del userRowKey sigue siendo siempre CachedRowSetRowKey[0].

Alguna idea de por qué puede pasar esto y cómo solucionarlo, por favor??
avbravo said…
enviame un email a avbravo@gmail.com
BJ Ramirez said…
Buen dia jvoenes javeros XD nesecito ayuda con lo siguiente:
estoy trabajando con:

-visual jsf
-hibernate
-mysql

esta es mi jsf para mantenimiento de nombres:

*************************************************************
ingrse nombre para buscar__________ botonBuscar
*************************************************************
clave nombre boton editar
************************************************************
1 a boton
2 b boton
3 c boton
4 d boton

*********************************************************
el chiste es q cuando le de el boton editar este se vaya a otra pagina
con los datos
de la tupla y para jalar esto, uso lo siguiente:

public String botonModificar()
{
try{
RowKey rk=tableRowGruop.gerRowKey();
if(rk!=null)
{
int
clave=Integer.parseInt(DataProvider.getValue("clave",rk).toString);
int
nombre=Integer.parseInt(DataProvider.getValue("nombre",rk).toString);
this.getSessionBean.setclave(clave);
this.getSessionBean.setnombre(nombre);
}
}catch(Exception e)
{
system.err.println(e);
}
return "paginaModificar"
}
-tons en la pagina mdoficar jalo los datos con el sessionbean.getclave
y getnombre y ya tengo los datos en la otra pagina.

y esto funciona de maravilla el problema es cuando ingreso el
parametro de busqueda y mi table cambia ejemplo ingreso c y le doy
buscar y mi tabal se pone con el parametro correcto. y todo va bien

************************************************************
ingrse nombre para buscar___c______ botonBuscar
************************************************************
clave nombre boton editar
************************************************************
3 c boton
************************************************************

el probema es q cuando el doy al boton modificar a este ya con la
busqueda
el codigo de arriba me tira lso datos del reguistro en la primera
posicion :S

me tira los datos de clave=1 y nombre =a en vez de tirarme clave=3 y
nombre=c,

como q no cambio a nivel de datos el table sino solo vista, :s

Popular posts from this blog

Un ejemplo sencillo de Refactorización y Genericos

Un ejemplo sencillo de Refactorización y Genericos

public class Refactorizador<K, V> {

    public V copyFromBeans(K k, V v) {
        try {
            Class claseK = k.getClass();
            Class claseV = v.getClass();

            Method[] metodosK = claseK.getMethods();

            for (Method method : metodosK) {
                if (isGetter(method)) {
                    Method metodoGetK = claseK.getDeclaredMethod(method.getName());
                    Method metodoSetV = claseV.getDeclaredMethod(changeGetBySet(method.getName()), method.getReturnType());
                    metodoSetV.invoke(v, metodoGetK.invoke(k));
                }

            }

        } catch (Exception e) {
            System.out.println("refactorizador() " + e.getLocalizedMessage());
        }
        return v;
    }

     public  boolean isGetter(Method method) {

        if (!method.getName().startsWith("get")) {
            return false;
        }
        if (method.getName().startsWith("getCla…

Apache NetBeans

Apache NetBeans
https://wiki.apache.org/incubator/NetBeansProposal

Si, algo que se esperaba desde hace muchos años, una liberación de NetBeans, para convertirlo en un IDE más abierto, y que permita mayor contribución de la comunidad y de otras empresas, ya inicio su primera etapa en la incubadora de la Fundación Apache.
Las implicaciones que esto conlleva son múltiples por una parte esta la evolución de NetBeans, al permitir que más contribuyentes puedan aportar a sus mejoras, también garantiza que aquellas instituciones no sientan que es una sola organización la que controla la evolución. A las comunidades les permite sentirse que participan de un proyecto con todas las garantías que ofrece la Fundación Apache.

Muchos pensaran que Oracle esta dejando morir el proyecto, la realidad es diferente, hay muchos ingenieros que están participando del proyecto en la fundación Apache.
Es una noticia excelente para los desarrolladores, instituciones, empresas que utilizan NetBeans , se estima qu…

JGMongo con JEE7 +(Primefaces+MongoDB+GlassFish)

Mostrare un ejemplo básico del uso de JGMongo, (Java Mapper Object para MongoDB), en un entorno JavaEE 7.

Desarrollaremos una simple aplicación maven Java Enterprise Edition, que utiliza la base de datos NoSQL MongoDB, NetBeans como IDE de Desarrollo, Java Server Faces como Framework en conjunto con PrimeFaces. Es un ejemplo muy básico donde se almacena los datos de los países en una colección llama paises La vista final sera la siguiente un formulario para captar los datos

Y una pagina donde se muestran los países almacenados en la base de datos.
Pasos previos: 1. Instalar MongoDB 2. Crear el proyecto Maven 3. Agregar la dependencia al archivo pom.xml   <repositories> <repository>    <id>jitpack.io</id>    <url>https://jitpack.io</url> </repository> </repositories>
    <dependency>    <groupId>com.github.avbravo</groupId>    <artifactId>jgmongo</artifactId>    <version>0.1</version> </dependency&…