Cuando deseamos agregar registros y verificar si existe algun valor en la tabla, podemos hacerlo de varias maneras:
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)
- 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.
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
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??
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