2009-11-15 7 views
1

J'ai un index.jsp avecConvertir le texte tapé dans en minuscules

[snip]

<% 
    String name = request.getParameter("name"); 
    String pass = request.getParameter("pass"); 
    String globalname = "webeng"; 
    String globalpass = "2009"; 
    if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass)) 
    { 
    %> 
    <hr /> 
    <p><b>Howdy, <%= request.getParameter("name") %></b></p> 
    <hr /> 
<% } 
    else if (name !=null | pass!=null && name.equals("") | pass.equals("")) 
    { 
    %> 
    <hr /> 
    <p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p> 
    <hr /> 
<% } 
    else if (name !=null | pass!=null && !name.equals(globalname) | !pass.equals(globalpass)) 
    { 
    %> 
    <hr /> 
    <p><b>Incorrect Userdata!</b></p> 
    <hr /> 
<% } 
    else{ 
    } 
%> 

[snip]

Maintenant, le globalname par exemple, est en minuscule " webeng ". Les gens peuvent taper "WebEng", "webENG", "WEBENG" et leurs variantes.

J'ai besoin de ceux tapés dans Strings convertis en minuscules. D'une manière ou d'une autre

String newname = name.toLowerCase(); 
String newpass = pass.toLowerCase(); 

ne fonctionne pas. Quelqu'un a une idée?

C'est ce que Eclipse me dit quand j'utiliser

<% 
     String name = request.getParameter("name"); 
     String pass = request.getParameter("pass"); 
     String globalname = "webeng"; 
     String globalpass = "2009"; 
     String newname = name.toLowerCase(); 
     String newpass = pass.toLowerCase(); 

     if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass)) 
     { 
     %> 
     <hr /> 
     <p><b>Howdy, <%= request.getParameter("name") %></b></p> 
     <hr /> 
    <% } 
     else if (name !=null | pass!=null && name.equals("") | pass.equals("")) 
     { 
     %> 
     <hr /> 
     <p><b>One or more fields are empty!</b></p> 
     <hr /> 
    <% } 
     else if (name !=null && pass!=null && !name.equals(globalname) | !pass.equals(globalpass)) 
     { 
     %> 
     <hr /> 
     <p><b>Incorrect Userdata!</b></p> 
     <hr /> 
    <% } 
     else{ 
     } 
    %> 

Eclipse: http://i.imagehost.org/0277/2009-11-15_19_34_00.png

+0

Si vous répercutez temporairement le contenu de newname et de newpass sur votre page, que voyez-vous? –

+0

Il y a encore votre rien-dire "ne fonctionne pas.". Qu'est-ce qui se passe réellement? Avez-vous débogué votre code? Avez-vous ajouté 'System.out.println (newname)' pour le vérifier? – BalusC

Répondre

0

Vous pouvez utiliser compareToIgnoreCase et vous ne devez pas faire la conversion vous-même.

+0

Je dois utiliser toLowerCase(). –

+0

Que diriez-vous de 'equalsIgnoreCase()'? Cela fait parfaitement ce que vous voulez. – BalusC

+0

Encore une fois, je dois utiliser toLowerCase() –

5

Votre logique de code est étrange. Scriptlets ne rend pas non plus le test plus facile. Voici un SSCCE en saveur d'une véritable classe Java pour le coup d'envoi et faciliter les tests:

public class Test { 

    public static void main(String[] args) throws Exception { 
     String user = "WeBeNg"; // Change this as if it is user input. 
     String pass = "2009"; // Change this as if it is user input. 

     String expectedUser = "webeng"; 
     String expectedPass = "2009"; 

     if (user == null || pass == null || user.isEmpty() || pass.isEmpty()) { 
      System.out.println("Please enter both username and password."); 
     } else if (user.equalsIgnoreCase(expectedUser) && pass.equals(expectedPass)) { 
      System.out.println("Welcome " + user); 
     } else { 
      System.out.println("Unknown login."); 
     } 
    } 

} 

Hope this helps.

Modifier n ° 1: ne postez pas de captures d'écran. Copypaste l'exception et stacktrace dans les blocs de code. L'exception est d'ailleurs ne venant pas d'Eclipse. Ça vient de Tomcat. En outre, l'exception en question (NullPointerException) est assez explicite. Vous avez accédé à une référence d'objet qui est en fait nulle.

SomeObject someObject = null; 
someObject.doSomething(); // Fails with NPE. 
someObject = new SomeObject(); 
someObject.doSomething(); // Succes. 

Vous devez d'abord effectuer une vérification des valeurs nulles, par ex.

if (someObject != null) { 
    someObject.doSomething(); // Succes. 
} 

Edit # 2 Je vous recommande également d'en apprendre davantage sur les opérateurs, la priorité des opérateurs et l'expression de regroupement en Java. Voir, ce qui suit est pas « logique »

if (name !=null | pass!=null && name.equals("") | pass.equals("")) 

est ici un bon tutoriel pour commencer à apprendre à ce sujet: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html Bonne chance.

+0

Notez la différence subtile entre ceci et ce que vous faites. Vous devez vérifier null avant d'utiliser une méthode de chaîne sur le nom. Dans votre code, vous essayez d'appeler toLowerCase() avant de vous assurer que le nom n'est pas null. – unholysampler

0

Vous semblez utiliser | au lieu de || . Est-ce intentionnel?

+0

Oui, parce que si j'utilise: (name == null || pass == null || name.equals ("") || pass.equals ("")), je vais obtenir le

Ooops, un ou plus de champs sont vides. S'il vous plaît remplissez tout !!

Immédiatement lorsque je charge la page, ce n'est pas l'intention. Je veux qu'il apparaisse APRÈS avoir laissé 1 ou les deux champs vides et APRÈS avoir appuyé sur le bouton "envoyer". –

0

Ici c'est avec equalsIgnoreCase. Sauf si vous ne voulez pas vraiment raccourcir le ou avec l'opérateur |, il est généralement plus sûr d'aller avec ||. Je préfère également ne pas tomber dans le succès comme dans la réponse de BalusC, il y a quelque chose d'inquiétant à propos de la condition par défaut étant de "connecter" l'utilisateur.

<% 
String name = request.getParameter("name"); 
String pass = request.getParameter("pass"); 
String globalname = "webeng"; 
String globalpass = "2009"; 
if (name ==null || pass==null || name.equals("") || pass.equals("")) { 
// You can use StringUtils.isBlank here instead if you have it available to you 
%> 
<hr /> 
<p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p> 
<hr /> 
<% } else if (name.equalsIgnoreCase(globalname) && pass.equalsIgnoreCase(globalpass)) 
{ 
%> 
    <hr /> 
    <p><b>Howdy, <%= request.getParameter("name") %></b></p> 
    <hr /> 
<% } else { 
%> 
    <hr /> 
    <p><b>Incorrect Userdata!</b></p> 
    <hr /> 
} 
%> 
+0

'java.lang.String' a une méthode' isEmpty() '. Si vous voulez aussi couvrir les espaces, alors 'name.trim(). IsEmpty()'. – BalusC

+0

isEmpty a été introduit en Java 6, car je pense que beaucoup de gens (y compris moi) utilisent encore 5, vous devriez mentionner quand c'est une nouvelle méthode. – medopal

Questions connexes