tenho um cadastro de usuario, e com esse cadastro uso para acessar o programa, atraves de uma tela de login.O problema é que não consigo fazer o sistema comparar a senha digitada.Quando eu comento a linha ( && (TxtSenha.getText().equals(usuario.getSenha()))){ ) ele faz a comparação correta com o usuario. O atributo senha é do tipo String. Como eu resolvo esse problema e faço para que compare o Nome e a Senha simultaneamente. Muito obrigado!Segue abaixo o codigo que estou trabalhando.
private void BtnEntrarActionPerformed(java.awt.event.ActionEvent evt) {
SessionFactory sfac = new Configuration().configure().buildSessionFactory();
Session se = sfac.openSession();
Transaction tx = se.beginTransaction();
Query sql = se.createQuery("from Usuario where Nome = (?)").setString(0,TxtUsuario.getText());
Usuario usuario = (Usuario) sql.uniqueResult();
if((TxtUsuario.getText().equals(usuario.getNome()))
&& (TxtSenha.getText().equals(usuario.getSenha()))){ [color=red]// ->não consigo fazer essa comparação.[/color]
JOptionPane.showMessageDialog(this,"Bem vindo ao Gerenciador Pessoal!");
new frmPrincipal().setVisible(true);
this.setVisible(false);
}
else{
JOptionPane.showMessageDialog(this,"Usuario ou senha incorretos.");
TxtSenha.setText(null);
TxtUsuario.setText(null);
}
}
Você pode tambem tentar fazer a validação do logine senha separado para verificar se o problema é na sixtaxe ou na sua lógica
if((TxtUsuario.getText().equals(usuario.getNome())) {
//Põe algo aqui para dizer se o login esta correto ou não e manda armazenar isso
}
e
if(TxtSenha.getText().equals(usuario.getSenha())){
//Põe algo aqui tb para dizer se a senha é valida tb. ai armazena. e manda exibir. Se a validação der certo, então o problema é no If composto que você fez.
}
[quote=leorbarbosa]Já ouviu falar em short-circuit operators?
Então, java possui:
& , |, &&, ||
&& , || testam as duas condições no seu teste.
Enquanto & , | se contentam com o "left-hand " ou seja, a primeira parte da condição.
[/quote]
É ao contrário!
&& e || só testam o que necessitam até terem um resultado que lhes permita saber o resultado final da expressão.
Um && para no primeiro false e devolve false
Um || para no primeiro true e devolve true.
& e | testam todas as condições independentemente de já saberem o resultado que vai ser retornado no final.
[quote=pmlm][quote=leorbarbosa]Já ouviu falar em short-circuit operators?
Então, java possui:
& , |, &&, ||
&& , || testam as duas condições no seu teste.
Enquanto & , | se contentam com o "left-hand " ou seja, a primeira parte da condição.
[/quote]
É ao contrário!
&& e || só testam o que necessitam até terem um resultado que lhes permita saber o resultado final da expressão.
Um && para no primeiro false e devolve false
Um || para no primeiro true e devolve true.
& e | testam todas as condições independentemente de já saberem o resultado que vai ser retornado no final.[/quote]