Problema login usuarios

Iniciado por Winterz, 26 Mayo 2014, 18:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Winterz

Hola buenas tengo 2 dudas bastante simples que no me consiguen salir,

Tengo una ventana tipica de alta usuario con sus correspondientes campos nombre, dni, email y contraseña, lo que no consigo es que me saque un error cuando dejo algun campo vacio de manera que no me permita registrarme si no he introducido todos los campos aunque sea con datos estupidos. He probado haciendo sentencia de control con textNombre.getText.isEmpty pero me da NullPointerException y no he sabido solucionarlo, habia pensado en una exception pero nose donde situarla.

La otra duda que tengo esque tengo almacenados en un Hashmap a los usuarios que se van registrado, en el momento del login nose como hacer para que te valide las 2 cosas de manera que si encuentra el usuario sepa ya su contraseña y me pueda validar ambos campos.

En este mismo punto me encuentro con que tengo un login de administrador, el cual no he incluido en el mismo saco que los Usuarios, si logeo como admin debe de aparecer una ventana si logeo como usuario pues otra. Habia pensado en hacer un control tipico de si el texto es admin y la pass 1234 vete a la ventana de admin sino comprueba que el usuario exista.


Migugami

Cita de: Winterz
Tengo una ventana tipica de alta usuario con sus correspondientes campos nombre, dni, email y contraseña, lo que no consigo es que me saque un error cuando dejo algun campo vacio de manera que no me permita registrarme si no he introducido todos los campos aunque sea con datos estupidos

Es realmente sencillo, hay diversas formas de validar datos, aquí te pongo un ejemplo:

Código (=java) [Seleccionar]

public class RegistrarClienteControl {

final RegistrarClienteGUI GUI;

public RegistrarClienteControl(RegistrarClienteGUI referencia) {
gui = referencia;
}

public boolean validar(TextField... campos) {
boolean validacion_ok = true;
boolean campos_vacios = false;

for(TextField txt : campos) {
if(txt.getText().isEmpty) {
validacion_ok = false;
campos_vacios = true;
break;
}
}

if(campos_vacios)
JOptionPane.showMessageDialog(GUI,"No deje campos vacíos.");
else if( !isNumeric(GUI.txtTelefono.getText()) )
JOptionPane.showMessageDialog(GUI,"Algunos campos deben ser numéricos.");

return validacion_ok;
}

public void guardarCliente() {
boolean exito = validar(GUI.txtNombre, GUI.txtApellido, GUI.txtDireccion, GUI.txtEmail, GUI.txtTelefono);
if(exito) {
// aqui guardas los datos
}
}

private boolean isNumeric(String posbl_num) {
try {
Integer.parseInt(posbl_num);
return true;
} catch (NumberFormatException ex) {
return false;
}
}

} // FIN


Cita de: Winterz
La otra duda que tengo esque tengo almacenados en un Hashmap a los usuarios que se van registrado, en el momento del login nose como hacer para que te valide las 2 cosas de manera que si encuentra el usuario sepa ya su contraseña y me pueda validar ambos campos.

Cuando se ingrese el usuario y contraseña en el login, en primer lugar debes extraer esos datos. Luego, buscas el usuario en el HashMap, si lo encuentra procedes a comparar las contraseñas.

Código (=java) [Seleccionar]

public class ValidacionLogin {

private boolean usuario_existe(String usuario) {
if(listaUsuarios.containsKey(usuario))
return true;
else
return false;
}

private boolean validar_password(String usuario, String password_ingresado) {
String password = listaUsuarios.get(usuario);
if(password.equals(password_ingresado))
return true;
else
return false;

}

public void validar_login() {
String usuario = txtUsuario.getText();
String password = txtPassword.getText();
boolean exito = false;

if(usuario_existe(usuario)) {
if(validar_password(password))
ingresar();
else
JOptionPane.showMessageDialog(GUI,"El password ingresado es incorrecto.");
}
else
JOptionPane.showMessageDialog(GUI,"Usuario no existe.");
}

public void ingresar() {
// codigo para redireccionar a la pagina del cliente
}

} // FIN


Yo te recomendaría que crees una entidad (bean) que represente a los clientes para que guardes los datos en un objeto Cliente. Te pongo un ejemplo:

Código (=java) [Seleccionar]

public class Cliente {
private String nombre;
private String apellido;
private String direccion;
private String email;
private int telefono;

public Cliente(String nombre, String apellido, String direccion,
String email, int telefono) {
this.nombre = nombre;
this.apellido = apellido;
this.direccion = direccion;
this.email = email;
this.telefono = telefono;
}

public String getNombre() {
return this.nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return this.apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public String getDireccion() {
return this.direccion;
}

public void setDireccion(String direccion) {
this.direccion = direccion;
}

public String getEmail() {
return this.email;
}

public void setEmail(String email) {
this.email = email;
}

public int getTelefono() {
return this.telefono;
}

public void setTelefono(int telefono) {
this.telefono = telefono;
}

} // FIN


Entonces, para registrar al cliente lo haríamos así:

Código (=java) [Seleccionar]

public class RegistrarClienteControl {

final RegistrarClienteGUI GUI;
List<Cliente> listaClientes = new ArrayList<>(); // aqui se guardaran los clientes

public RegistrarClienteControl(RegistrarClienteGUI referencia) {
gui = referencia;
}

public boolean validar(TextField... campos) {
boolean validacion_ok = true;
boolean campos_vacios = false;


for(TextField txt : campos) {
if(txt.getText().isEmpty) {
validacion_ok = false;
campos_vacios = true;
break;
}
}

if(campos_vacios)
JOptionPane.showMessageDialog(GUI,"No deje campos vacíos.");
else if( !isNumeric(GUI.txtTelefono.getText()) ) 
JOptionPane.showMessageDialog(GUI,"Algunos campos deben ser numéricos.");

return validacion_ok;
}

public void guardarCliente() {
boolean exito = validar(GUI.txtNombre, GUI.txtApellido, GUI.txtDireccion, GUI.txtEmail, GUI.txtTelefono);
if(exito) {
String nombre = GUI.txtNombre.getText();
String apellido = GUI.txtApellido.getText();
String direccion = GUI.txtDireccion.getText();
String email = GUI.txtEmail.getText();
int telefono = Integer.parseInt(GUI.txtTelefono.getText());
listaClientes.add(new Cliente(nombre, apellido, direccion, email, telefono));
}
}

private boolean isNumeric(String posbl_num) {
try {
Integer.parseInt(posbl_num);
return true;
} catch (NumberFormatException ex) {
return false;
}
}

} // FIN


Ahora, para validar el login, haríamos lo siguiente:

Código (=java) [Seleccionar]

public class validacionLogin {

private boolean usuario_existe(String usuario) {
boolean existe = false;

for(Usuarios u : listaUsuarios) {
if (u.getUsuario().equals(usuario))
existe = true;
break;
}

return existe;
}

private boolean validar_password(String usuario, String password_ingresado) {
String password = listaUsuarios.get(usuario);
boolean success = false;

for(Usuarios u : listaUsuarios) {
if (u.getUsuario().equals(usuario)) {
String password = u.getPassword();
if(password.equals(password_ingresado))
success = true;
}

}

}

public void validar_login() {
String usuario = txtUsuario.getText();
String password = txtPassword.getText();

if(usuario_existe(usuario)) {
if(validar_password(password))
ingresar();
else
JOptionPane.showMessageDialog(GUI,"El password ingresado es incorrecto.");
}
else
JOptionPane.showMessageDialog(GUI,"Usuario no existe.");
}

public void ingresar() {
// codigo para redireccionar a la pagina del cliente
}

} // FIN


Trabajar con entidades (beans) es muy importante en el desarrollo de aplicaciones Java. Recuerda, Java es un lenguaje casi total orientado a objetos, por lo que hay que aprovechar las ventajas que ésto nos trae.

Un saludo.

Winterz

Muchas gracias me has sido de gran ayuda!!!!