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

Tutorial básico de aplicaciones Web con NetBeans parte 1

NetBeans ofrece un excelente soporte para el desarrollo de aplicaciones Web, en esta ocasión lo haremos utilizando el Framework Java Server Faces 2.0. En el Menu Seleccionamos Nuevo->Proyecto y luego en Categorias Java Web y en tipo de Proyectos Web  Application indicamos el nombre del proyecto Seleccinamos el servidor Web, usamos GlassFish ya que este soporta EJB3.0 y JSF 2.0 Framework Java Server Faces El IDE genera el esquelto del proyecto Web Pages   almacenamos las paginas .html, xhtml, jsf, los archivos de recursos, los scripts .js, imagenes Source Packages    Son las clases Java  Test Packages    Son las clases que usamos para los Test Libraries     Tenemos las bibliotecas de Java y GlassFish necesarias para ejecutar la aplicación Web. Test Libraries     Están las bibliotecas usadas para los test  Configuration Files    Archivos de configuración de la aplicación. Ejecutamos la...

Incrementar Memoria NetBeans

Algunas veces necesitamos incrementar la memoria para un mejor rendimiento. http://www.netbeans.org/community/releases/55/uml-download.html Este es un ejemplo para UML. Descripción en ingles. Increasing Memory Settings (applicable to all builds) The default memory settings for NetBeans should be increased for UML projects. If you have the available memory, Locate your NetBeans installation directory ($install_dir). This can be found by starting up NetBeans and selecting Help -> About then select the Detail tab. Edit the $install_dir/etc/netbeans.conf file. Find the line defining netbeans_default_options . Increase the maximum memory attribute to -J-Xmx512m. If you experience heap overflows while working with larger files, you should increase this value further.

Cambiando el estado de un checkbox

Cambiando el Estado de un CheckBox Algunas veces deseamos controlar el estado de un checkbox o cambiarlo segùn determinadas condiciones. Pasos: 1. Creamos un proyecto Web. 2. En el diseñador agregamos un checkbox y dos botones. * Dar click derecho en el checkbox y luego seleccionar Add Binding Attribute, para agregar los atributos al checkbox, de manera que los podamos usar en nuestro código. Generando automáticamente private Checkbox checkbox1 = new Checkbox(); public Checkbox getCheckbox1() { return checkbox1; } public void setCheckbox1(Checkbox c) { this.checkbox1 = c; } 3.Damos click derecho en el botón Habilitar, y seleccionamos Edit Action Event Handler. A continuación, agregamos el código: this.checkbox1.setSelected(true);, el método setSelected con valor true, marca el checkbox como seleccionado, y un valor de false, quita la marca. public String button1_action() { // TODO: Process the action. Return value is a navigation // ...