Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Winterz en 26 Mayo 2014, 18:19 pm



Título: Problema login usuarios
Publicado por: Winterz en 26 Mayo 2014, 18:19 pm
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.


Título: Re: Problema login usuarios
Publicado por: NikNitro! en 26 Mayo 2014, 18:57 pm
Has probado con un try catch o un do while?


Título: Re: Problema login usuarios
Publicado por: Migugami en 26 Mayo 2014, 20:12 pm
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
  1. public class RegistrarClienteControl {
  2.  
  3. final RegistrarClienteGUI GUI;
  4.  
  5. public RegistrarClienteControl(RegistrarClienteGUI referencia) {
  6. gui = referencia;
  7. }
  8.  
  9. public boolean validar(TextField... campos) {
  10. boolean validacion_ok = true;
  11. boolean campos_vacios = false;
  12.  
  13. for(TextField txt : campos) {
  14. if(txt.getText().isEmpty) {
  15. validacion_ok = false;
  16. campos_vacios = true;
  17. break;
  18. }
  19. }
  20.  
  21. if(campos_vacios)
  22. JOptionPane.showMessageDialog(GUI,"No deje campos vacíos.");
  23. else if( !isNumeric(GUI.txtTelefono.getText()) )
  24. JOptionPane.showMessageDialog(GUI,"Algunos campos deben ser numéricos.");
  25.  
  26. return validacion_ok;
  27. }
  28.  
  29. public void guardarCliente() {
  30. boolean exito = validar(GUI.txtNombre, GUI.txtApellido, GUI.txtDireccion, GUI.txtEmail, GUI.txtTelefono);
  31. if(exito) {
  32. // aqui guardas los datos
  33. }
  34. }
  35.  
  36. private boolean isNumeric(String posbl_num) {
  37. try {
  38. Integer.parseInt(posbl_num);
  39. return true;
  40. } catch (NumberFormatException ex) {
  41. return false;
  42. }
  43. }
  44.  
  45. } // 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
  1. public class ValidacionLogin {
  2.  
  3. private boolean usuario_existe(String usuario) {
  4. if(listaUsuarios.containsKey(usuario))
  5. return true;
  6. else
  7. return false;
  8. }
  9.  
  10. private boolean validar_password(String usuario, String password_ingresado) {
  11. String password = listaUsuarios.get(usuario);
  12. if(password.equals(password_ingresado))
  13. return true;
  14. else
  15. return false;
  16.  
  17. }
  18.  
  19. public void validar_login() {
  20. String usuario = txtUsuario.getText();
  21. String password = txtPassword.getText();
  22. boolean exito = false;
  23.  
  24. if(usuario_existe(usuario)) {
  25. if(validar_password(password))
  26. ingresar();
  27. else
  28. JOptionPane.showMessageDialog(GUI,"El password ingresado es incorrecto.");
  29. }
  30. else
  31. JOptionPane.showMessageDialog(GUI,"Usuario no existe.");
  32. }
  33.  
  34. public void ingresar() {
  35. // codigo para redireccionar a la pagina del cliente
  36. }
  37.  
  38. } // 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
  1. public class Cliente {
  2. private String nombre;
  3. private String apellido;
  4. private String direccion;
  5. private String email;
  6. private int telefono;
  7.  
  8. public Cliente(String nombre, String apellido, String direccion,
  9. String email, int telefono) {
  10. this.nombre = nombre;
  11. this.apellido = apellido;
  12. this.direccion = direccion;
  13. this.email = email;
  14. this.telefono = telefono;
  15. }
  16.  
  17. public String getNombre() {
  18. return this.nombre;
  19. }
  20.  
  21. public void setNombre(String nombre) {
  22. this.nombre = nombre;
  23. }
  24.  
  25. public String getApellido() {
  26. return this.apellido;
  27. }
  28.  
  29. public void setApellido(String apellido) {
  30. this.apellido = apellido;
  31. }
  32.  
  33. public String getDireccion() {
  34. return this.direccion;
  35. }
  36.  
  37. public void setDireccion(String direccion) {
  38. this.direccion = direccion;
  39. }
  40.  
  41. public String getEmail() {
  42. return this.email;
  43. }
  44.  
  45. public void setEmail(String email) {
  46. this.email = email;
  47. }
  48.  
  49. public int getTelefono() {
  50. return this.telefono;
  51. }
  52.  
  53. public void setTelefono(int telefono) {
  54. this.telefono = telefono;
  55. }
  56.  
  57. } // FIN

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

Código
  1. public class RegistrarClienteControl {
  2.  
  3. final RegistrarClienteGUI GUI;
  4. List<Cliente> listaClientes = new ArrayList<>(); // aqui se guardaran los clientes
  5.  
  6. public RegistrarClienteControl(RegistrarClienteGUI referencia) {
  7. gui = referencia;
  8. }
  9.  
  10. public boolean validar(TextField... campos) {
  11. boolean validacion_ok = true;
  12. boolean campos_vacios = false;
  13.  
  14.  
  15. for(TextField txt : campos) {
  16. if(txt.getText().isEmpty) {
  17. validacion_ok = false;
  18. campos_vacios = true;
  19. break;
  20. }
  21. }
  22.  
  23. if(campos_vacios)
  24. JOptionPane.showMessageDialog(GUI,"No deje campos vacíos.");
  25. else if( !isNumeric(GUI.txtTelefono.getText()) )  
  26. JOptionPane.showMessageDialog(GUI,"Algunos campos deben ser numéricos.");
  27.  
  28. return validacion_ok;
  29. }
  30.  
  31. public void guardarCliente() {
  32. boolean exito = validar(GUI.txtNombre, GUI.txtApellido, GUI.txtDireccion, GUI.txtEmail, GUI.txtTelefono);
  33. if(exito) {
  34. String nombre = GUI.txtNombre.getText();
  35. String apellido = GUI.txtApellido.getText();
  36. String direccion = GUI.txtDireccion.getText();
  37. String email = GUI.txtEmail.getText();
  38. int telefono = Integer.parseInt(GUI.txtTelefono.getText());
  39. listaClientes.add(new Cliente(nombre, apellido, direccion, email, telefono));
  40. }
  41. }
  42.  
  43. private boolean isNumeric(String posbl_num) {
  44. try {
  45. Integer.parseInt(posbl_num);
  46. return true;
  47. } catch (NumberFormatException ex) {
  48. return false;
  49. }
  50. }
  51.  
  52. } // FIN

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

Código
  1. public class validacionLogin {
  2.  
  3. private boolean usuario_existe(String usuario) {
  4. boolean existe = false;
  5.  
  6. for(Usuarios u : listaUsuarios) {
  7. if (u.getUsuario().equals(usuario))
  8. existe = true;
  9. break;
  10. }
  11.  
  12. return existe;
  13. }
  14.  
  15. private boolean validar_password(String usuario, String password_ingresado) {
  16. String password = listaUsuarios.get(usuario);
  17. boolean success = false;
  18.  
  19. for(Usuarios u : listaUsuarios) {
  20. if (u.getUsuario().equals(usuario)) {
  21. String password = u.getPassword();
  22. if(password.equals(password_ingresado))
  23. success = true;
  24. }
  25.  
  26. }
  27.  
  28. }
  29.  
  30. public void validar_login() {
  31. String usuario = txtUsuario.getText();
  32. String password = txtPassword.getText();
  33.  
  34. if(usuario_existe(usuario)) {
  35. if(validar_password(password))
  36. ingresar();
  37. else
  38. JOptionPane.showMessageDialog(GUI,"El password ingresado es incorrecto.");
  39. }
  40. else
  41. JOptionPane.showMessageDialog(GUI,"Usuario no existe.");
  42. }
  43.  
  44. public void ingresar() {
  45. // codigo para redireccionar a la pagina del cliente
  46. }
  47.  
  48. } // 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.


Título: Re: Problema login usuarios
Publicado por: Winterz en 27 Mayo 2014, 00:38 am
Muchas gracias me has sido de gran ayuda!!!!