Concaténation fais planté le serveur dans une JSP

Résolu
cs_1611 Messages postés 4 Date d'inscription samedi 11 juin 2011 Statut Membre Dernière intervention 14 juin 2011 - 11 juin 2011 à 13:05
cs_1611 Messages postés 4 Date d'inscription samedi 11 juin 2011 Statut Membre Dernière intervention 14 juin 2011 - 14 juin 2011 à 13:25
Salut tout le monde !

Voilà, j'ai un examen à terminer pour la semaine prochaine et je suis bloqué ... L'énoncer est celui-ci : Entrer un nom et un prénom en minuscule dans un formulaire ainsi qu'un numéro de téléphone. Mettre la première lettre du prénom et du nom en majuscules. Séparer ensuite le numéro de tel comme dans cet exemple : 080989898 devient 080/98.98.98

Le nom et le prénom fonctionnent sans aucun soucis mais lorsque je souhaite concaténer le numéro de tel et les caractères : tomcat plante...

Quelqu'un peux m'éclairer ? Merci :)

Voici mon code relié à la jsp (ici "client.java" dans src) :


package com.ecole.examen;
public class Client {

String firstName = "";
String lastName = "";
String phone = "";

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;

firstName = firstName.toLowerCase();
if (firstName.length() > 0)
{
String firstCaracter = firstName.substring(0,1);

firstCaracter = firstCaracter.toUpperCase() ;

firstName = firstCaracter.concat(firstName.substring(1));
}
System.out.println(firstName);
this.firstName = firstName ;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;

lastName = lastName.toLowerCase();
if (lastName.length() > 0)
{
String firstCaracter = lastName.substring(0,1);

firstCaracter = firstCaracter.toUpperCase();

lastName = firstCaracter.concat(lastName.substring(1));
}
System.out.println(lastName);
this.lastName = lastName ;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone ;

if (phone.length() == 0)
{
phone = phone.substring(0,4).concat("/");
phone = phone.substring(4,6).concat(".");
phone = phone.substring(6,8).concat(".");
phone = phone.substring(8,10).concat(".");
}
System.out.println(phone);
}


public boolean validate() {
if(firstName.trim().length()<2)
{
return false;
}
else
{
return true;
}
}
}

11 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 11:40
    public void setPhone(String phone) {
        this.phone = formaterPhone(phone);
    }

    private String formaterPhone(String s){
        StringBuilder sb = new StringBuilder();
        sb.append(s.substring(0, 3));
        sb.append("/");
        sb.append(s.substring(3, 5));
        sb.append(".");
        sb.append(s.substring(5, 7));
        sb.append(".");
        sb.append(s.substring(7, 9));
        return sb.toString();
    }
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 11:45
Les StringBuilder, je ne sais pas si tu connais, c'est pour éviter de créer trop d'objets String, ca rend ton code plus rapide (en surchargeant moins le garbage collector).

Tu peux les remplacer par String res = "" et en ajoutant un res+=.. sur chaque ligne
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 09:55
Essayes ca :

    public void setFirstName(String firstName) {
        this.firstName = formater(firstName);
    }

    private String formater(String s){
        String res = "";
        if(s!=null && s.length()>0){
            String res = s.charAt(0)+"";
            res = res.toUpperCase();
            if(s.length()>1){
                res = res + s.substring(1).toLowerCase();
            }
        }
        return res;
    }
0
cs_1611 Messages postés 4 Date d'inscription samedi 11 juin 2011 Statut Membre Dernière intervention 14 juin 2011
14 juin 2011 à 10:20
Salut,

Merci de ton intervention ! J'ai testé mais ça n'y fais rien, le serveur plante mais j'ai remarqué exclusivement à la concaténation ici :

public void setPhone(String phone) {
this.phone = phone ;

if (phone.length() == 0)
{
phone = phone.substring(0,4).concat("/");
phone = phone.substring(4,6).concat(".");
phone = phone.substring(6,8).concat(".");
phone = phone.substring(8,10).concat(".");
}
System.out.println(phone);
} 


Si je tape ce code : la jsp tourne sans aucun soucis MAIS ne sépare pas les caractères...

Par contre si je change cette erreur :

if (phone.length() == 0)


par :

if (phone.length() != 0)


pour qu'il soit différent et non égale, alors là le serveur crash et j'ai une page d'erreur qui s'affiche.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 10:45
Le problème c'est que tu ne testes pas la taille de tes chaines de caractères remplaces par ca :

    public void setPhone(String phone) {
        this.phone = formaterPhone(phone);
    }

    private String formaterPhone(String s){
        String res = s;
        if (res!=null && res.length()>9){
            //Je ne comprends pas bien ce que tu fais dans ces lignes
            //C'est forcément faux
            res = res.substring(0,4).concat("/");
            res = res.substring(4,6).concat(".");
            res = res.substring(6,8).concat(".");
            res = res.substring(8,10).concat(".");
        }
        System.out.println(phone);
    } 
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 10:47
res = res.substring(0,4).concat("/");
//Taille de res : 5 : 4 premeirs caracteres de res plus /
//Et tu demandes de récupérer les caracteres 4,5 et 6 donc erreur
res = res.substring(4,6).concat(".");
res = res.substring(6,8).concat(".");
res = res.substring(8,10).concat(".");
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 10:47
Comment veux tu formater cette chaine ?
0
cs_1611 Messages postés 4 Date d'inscription samedi 11 juin 2011 Statut Membre Dernière intervention 14 juin 2011
14 juin 2011 à 11:20
En fait il s'agit d'un numéro de téléphone belge entré comme ceci par un user, exemple : 010234567 et il faut que mon code formate le tout comme ceci : 010/23.45.67

C'est ce que tu souhaitais savoir ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 11:34
Oui, attends une seconde, je te fais la fonction
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 juin 2011 à 11:41
Ce n'est pas ce que tu faisais, mais je te conseil de séparer le formatage de la chaine du setter, c'est toujours plus facile à maintenir.
0
cs_1611 Messages postés 4 Date d'inscription samedi 11 juin 2011 Statut Membre Dernière intervention 14 juin 2011
14 juin 2011 à 13:25
Pu***, tu es mon sauveur ! Je ne sais comment te remercier.

MILLE MERCI pour le temps que tu as passé à me rendre ce service !

Je ne connaissais effectivement pas le stringbuilder, mais ce "cours" m'a vraiment été utile

Merci encore
0
Rejoignez-nous