IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Accéder à des sous-chaînes à l'intérieur d'une propriété de type String


Sujet :

JSF Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut Accéder à des sous-chaînes à l'intérieur d'une propriété de type String
    Bonjour,

    voici une nouvelle question dont la réponse a sûrement déjà été donnée, mais pour laquelle je n'ai pas été capable de trouver les mots clefs pour la retrouver.
    Je la formule donc à ma façon, en espérant que l'un ou l'une d'entre vous saura trouver la réponse à ma question.

    Je dispose dans un bean d'une propriété de type String que je voudrais mapper avec plusieurs champs JSF (de type <h:inputText .../>) : chacun de ces champs serait (idéalement!) mappé avec une sous-chaîne de cette propriété.

    Par exemple, si je prends un numéro de compte décrit par un RIB, qui se compose de :
    • 1 Code banque
    • 1 Code Guichet
    • 1 Numéro de compte
    • 1 Clé RIB


    monBean charge un champ de BdD d'un bloc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String AccountData = "BBBBBGGCCCCCCCCCRR";
    avec évidemment les getter et setter associés.


    Dans mon JSF, je voudrais qqchose comme ça (c'est une formulation vue d'esprit, et non qqchose qui existe... et c'est bien là tout mon problème!) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	<h:inputText id="Banque"
    		value="#{monBean.NumeroCompte[1:2]}"							
    		required="true"
    		maxlength="5"/>
    	<h:inputText id="Guichet"
    		value="#{monBean.NumeroCompte[3:4]}"							
    		required="true"
    		maxlength="2"/>
    	<h:inputText id="NumeroCompte"
    		value="#{monBean.NumeroCompte[5:13]}"							
    		required="true"
    		maxlength="9"/>
    	<h:inputText id="NumeroCompte"
    		value="#{monBean.NumeroCompte[14:15]}"							
    		required="true"
    		maxlength="2"/>

    Je sais qu'il existe des fonctions de type substring dans la JSTL (fn:substring), mais -sauf si je les ai mal comprises- elles travaillenent avec des copies, et je ne peux donc pas utiliser cette fonction pour l'accès à la sous-chaîne correspondante.

    J'espère avoir été clair.
    Et merci de m'avoir lu jusque là.
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Réponse rapide : tu ne peux pas

    Si tu avais juste besoin d'afficher ces informations, ce serait différent. Mais là, tu as besoin aussi de mettre à jour les données. Et faire ce que tu veux n'est pas possible.

    Le plus simple c'est de créer autant de propriétés différentes que tu le souhaites (dans ton cas il y en a 4) avec leur getter / setter propres, et d'ajouter un getter supplémentaire dont le but est simplement de faire la concaténation de ces 4 propriétés.

    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private String codeBanque; // + getter, setter
    private String codeGuichet; // + getter, setter
    private String numeroCompte; // + getter, setter
    private String cleRIB; // + getter, setter
     
    public String getCompleteInfo() {
        return codeBanque + codeGuichet + numeroCompte + cleRIB;
    }
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Je craignais cette réponse.

    Dans tous les cas, merci beaucoup!

    Je m'en vais de ce pas faire à l'ancienne....
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Finalement j'ai opté pour une méthode un peu plus sioux qui m'évite de créer de travailler avec des copies (chose que j'essaie autant que possible d'éviter car source d'erreur.. de recopie naturellement!).

    Au final, je crèe des copies purement virtuelles : je fabrique autant de paire de getter/setter que de propriétés nécessaires pour découper mon champ.
    JSF se contente des getter/setter (il ne regarde pas s'il y a un membre correspondant apparemment).
    Et dans ces getter/setter, je travaille avec des masque sur mes données.

    Exemple* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    	public String getAccountGuichet() {
     
    		return getAccount.substring(0,5);
     
    	}
     
    	public void setAccountGuichet(String codeGuichet) {
    		setAccount(codeGuichet + getAccount.substring(5));
    	}
    la même chose pour codeBanque, clefRIB et numeroCompte (mais avec bien entendu un masque sur une zone différente).

    et côté JSF, mes valeurs de champ pointent vers ces propriétés "virtuelles".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    	<h:inputText id="codeGuichet"
    	     value="#{myBean.accountGuichet}"
    	     required="true"
    	     maxlength="5"/>
    	<h:inputText id="codeBanque"
    	     value="#{myBean.clefRIB}"
    	     required="true"
    	     maxlength="2"/>
    	<h:inputText id="clefRIB"
    	     value="#{myBean.codeBanque}"
    	     required="true"
    	     maxlength="5"/>
    	<h:inputText id="NumeroCompte"
    	     value="#{myBean.numeroCompte}"
    	     required="true"
    	     maxlength="11"/>
    * J'aurais aussi pu travailler avec un tableau de Byte de bons vieux masques (([value]&&0x00FF00)<<4) , celà va de soi (pour les amateurs de la vieille école!).
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  5. #5
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Oui, ça marche aussi, mais je trouve ça beaucoup plus lourd. Au lieu de disposer de 5 getters / setters très simples, et d'un faux getter, tu utilises 5 getters / setters trafiqués...

    J'avoue ne pas comprendre où se l'avantage de cette solution. Sans compter qu'à faire des account.substring(...), tu risques d'avoir des NullPointerException...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Les getters/setters que j'utilise sont un peu plus riche que ceux que j'ai montré . Je suis bien d'accord qu'il faut faire entre autres des tests de pointeur (que je fais dans ma version)
    J'ai juste mis une version simplifiée "lisible" pour expliquer le principe.

    Il me semblait plus simple de gérer correctement une bonne fois les getter/setter que de multiplier à tous les endroits où est utilisée ma propriété complète (ie l'ensemble des partie auxquelles accède l'utilisateur).
    La propriété en question est assez "tentaculaire", et l'ajout de "sous-copies" liées assez impactant.

    Mais là évidemment, tu as réussi à me mettre un doute
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  7. #7
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    En fait je dis ça aussi pour un autre point : il faut savoir que les getters utilisés directement par JSF sont parfois appelés plusieurs fois durant le cycle de vie de la requête.

    C'est pour cela qu'il est conseillé d'avoir des getters et setters simples.

    En fait je ne comprends pas bien en quoi ma solution implique de dupliquer des choses. Tu laisses les getters / setters simples à JSF, puis tu utilises le getter final dans tes propres classes ou alors si tu as besoin du détail comme le code guichet, tu peux utiliser les getters simples...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    En fait c'est moi qui n'avais pas bien compris... un café plus tard, et j'ai réalisé que j'avais mal compris ta réponse.
    En fait c'est effectivement et objectivement... mieux. Je n'ai plus grand chose pour la défense de ma méthode là!
    Ca vaut un mea culpa!
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Limiter la taille d'une propriété de type string
    Par Kropernic dans le forum VB.NET
    Réponses: 12
    Dernier message: 01/11/2012, 15h24
  2. Traitement des sous-chaînes
    Par vg-matrix dans le forum Langage
    Réponses: 4
    Dernier message: 03/08/2008, 18h23
  3. Traitement des sous-chaînes
    Par vg-matrix dans le forum Débuter
    Réponses: 1
    Dernier message: 03/08/2008, 02h22
  4. Comment insérer des fenetres (JFrames) à l'intérieur d'une fenêtre principale?
    Par smendou dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/06/2008, 22h51
  5. Réponses: 5
    Dernier message: 12/02/2008, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo