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

SWT/JFace Java Discussion :

JFace DataBinding & référence à un bean


Sujet :

SWT/JFace Java

  1. #1
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut JFace DataBinding & référence à un bean
    Bonjour

    J'ai un Bean avec 2 variables le nom du pays et une référence à son parent (le continent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Country extends AbstractModelObject{
     
    	private String countryName;// Nom du pays
    	private Continent continentParent;// Le parent du pays -> le continent
     
    ............................	
    }
    et le Bean Parent (le continent) qui contient une liste de pays
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Continent extends AbstractModelObject{
     
    	private String continentName;// Nom du continent
    	private List<Country> countries = new ArrayList<Country>(); //Liste des pays
     
    ........................	
    }

    J'ai créer un wizardPage (avec 2 champs parent et Nom) pour créer un pays.
    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
     
    ................
    	@Override
    	public void createControl(Composite parent) {
    		final DataBindingContext dbc = new DataBindingContext();
     
    		//ici mise en place des widgets		
     
    		bind(dbc, parentText, country, "continent", new NotEmptyValidator(
    		"le nom du continent"));
     
    		bind(dbc, nameText, country, "countryName", new NotEmptyValidator(
    				"le nom du pays"));
     
    //fin de la méthode
    	}
    Et mon wizard qui contrôle ma page
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    public class AddCountryWizard extends Wizard implements INewWizard{
     
    	/**
             * La page du wizard
             */
    	private AddCountryWizardPage addCountryWizardPage;
     
     
    	/**
             * Le pays
             */
    	private Country country = new Country();
    	/**
             * La continent parent
             */
    	private Continent continentParent;
     
    	/**
             * Constructeur du wizard
             * @param uiController
             */
    	public AddStationWizard(){
    		this.setWindowTitle("Nouveau pays");
    	}
     
     
    	/**
             * Ajoute les pages au wizard
             */
    	@Override
    	public void addPages() {
    		super.addPages();
    		if(addCountryWizardPage == null){
    			country.setContinent(continentParent);
    			addCountryWizardPage = new AddCountryWizardPage(country);
    		}
    		addPage(addCountryWizardPage);
    	}
     
    	@Override
    	public boolean performFinish() {
                    AddCountry(country);	
    		return true;
    	}
     
    	/**
             * Initialisation du wizard
             */
    	@Override
    	public void init(IWorkbench workbench, IStructuredSelection currentSelection) {
    		// Si la selection est une instance de continent
    		if(currentSelection.getFirstElement() instanceof Continent){
    			continentParent = (Continent)currentSelection.getFirstElement();
    		}
    	}
     
     
    	/**
             * Permet de lier un widgets de type "Text
             *  à la variable d'un Bean
             *  
             * @param dbc
             * @param textWidget
             * @param bean
             * @param property
             * @param validator
             */
    	protected void bind(DataBindingContext dbc, Text textWidget, Object bean,
    			String property, IValidator validator) {
    		UpdateValueStrategy targetToModel = null;
    		if (validator != null) {
    			targetToModel = new UpdateValueStrategy()
    					.setAfterConvertValidator(validator);
    		}
    		dbc.bindValue(SWTObservables.observeText(textWidget, SWT.Modify),
    				BeansObservables.observeValue(bean, property), targetToModel,
    				null);
    	}
    ///////////////////////
    //////////////////////////////
    }

    Je sélectionne un continent (ex: Asie), lorsque je lance mon wizard, mon champ texte parent ( = continent) contient une référence à l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    worlddatabinding.domain.Continent@51ef4970
    Ce qui est logique vue que je lie directement l'objet parent au widget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bind(dbc, parentText, country, "continent", new NotEmptyValidator(
    		"le nom du continent"));
    Je souhaite avoir le nom du parent (Asie) dans mon widget hors quand je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bind(dbc, parentText, country.getContinent(), "continentName", new NotEmptyValidator(
    		"le nom du continent"));
    J'ai bien le nom de mon continent dans mon widget mais en faisant cela mon widget est lié au nom du continent

    Donc si je souhaite par la suite changer le continent en tapant "Amerique" dans mon widget.... Je modifie le nom de mon objet parent Asie en Amerique.....

    Bref.... Il est tard et je ne suis pas sur d'être explicite

    Peut-on lier un Bean à un widget mais afficher dans celui-ci qu'une variable de ce Bean ?

    D'avance merci

  2. #2
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    Salut,
    en effet tu es fort peu compréhensible pour le coup ...
    tu dis
    Donc si je souhaite par la suite changer le continent en tapant "Amerique" dans mon widget.... Je modifie le nom de mon objet parent Asie en Amerique.....
    et tu demande
    Peut-on lier un Bean à un widget mais afficher dans celui-ci qu'une variable de ce Bean ?
    Donc la réponse est oui, tu y réponds tout seul non ??...
    Il est tôt donc je suis peut être pas réveillé
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  3. #3
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    j'étais vraiment fatigué

    J'y répond pas seul.....

    J'arrive à lier un widget de type Text à une variable de type Objet (continent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bind(dbc, parentText, country, "continent", new NotEmptyValidator(
    		"le nom du continent"));
    mais mon widget affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    worlddatabinding.domain.Continent@51ef4970
    Si je je modifie mon Text... j'ai une erreur de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    !ENTRY org.eclipse.core.databinding 2 0 2010-11-24 21:05:39.477
    !MESSAGE Could not change value of worldatabinding.domain.Country@2e7aacc1.continent
    !STACK 0
    java.lang.IllegalArgumentException: argument type mismatch
    ..........
    Ce qui est logique car je change un Objet "Continent" en String

    Je souhaites modifier le nom du continent (String) dans le widget et faire référence à un objet de type continent

    La réponse est probablement simple mais je tourne en rond

  4. #4
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    Ah oui,
    je vois le problème.

    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bind(dbc, parentText, country, "continent", new NotEmptyValidator(
    		"le nom du continent"));
    il faudrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    bind(dbc, parentText, continentParent, "continentName", new NotEmptyValidator(
    		"le nom du continent"));
    du moment que ton continentParent est initialisé avec le parent de ton country ça devrait passer.
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  5. #5
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    Oui cela passe, j'ai bien le nom de continent qui s'affiche dans mon parentText.
    Vue que c'est du databinding, lorsque je modifie le parent (continent), je modifie le nom (continentName) du continent.

    Par exemple, j'ai 2 continents:
    1. Asie
    2. Amerique


    Je sélectionne un continent, j'ouvre mon wizard de création de pays,
    J'ai mon wizard avec 2 widget Text qui s'affichent
    • Parent : {Amerique}
    • Nom du pays : {vide}


    Je renseigne le pays : "Chine" et m'aperçois que j'ai sélectionné le mauvais continent.
    Je modifie le parent en "Asie" et valide

    je me retrouve désormais avec 2 continents Asie dont 1 contient mon nouveau pays

    D'avance merci

  6. #6
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    Le fonctionnement est normal pour moi, ou j'ai loupé un truc ??
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  7. #7
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    Le fonctionnement est anormal car je me retrouve avec deux objets ayant le même nom.

    pingoui

  8. #8
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    As tu quitté le wizard puis réouvert en sélectionnant "Asie", ou as tu modifié "Amérique" en tapant "Asie" ?
    Si tu as fait la modification du texte directement c'est tout à fait normal que tu te retrouves avec 2 "Asie"...
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  9. #9
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Citation Envoyé par jojodu31 Voir le message
    ou as tu modifié "Amérique" en tapant "Asie" ?
    Si tu as fait la modification du texte directement c'est tout à fait normal que tu te retrouves avec 2 "Asie"...
    oui... C'est normal !... mais ce que je souhaites éviter

    Je souhaite changer de continent sans devoir sortir du wizard

  10. #10
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    ah c'est bien ce qu'il me semblait... tu devrais procéder différemment dans ce cas : par exemple ajouter une Combo ou liste contenant les continents que tu as, et qui mettrait à jour les deux champs texte. Sans quoi ça va être un peu compliqué et par très user friendly
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  11. #11
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Merci pour tes conseils

    J'ai ajouté un bouton qui permet de lancer une fenêtre de Recherche de continent

  12. #12
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    De rien pense au petit si c'est bon pour toi
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

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

Discussions similaires

  1. [Article] JFace Databinding sous Eclipse avec SWT
    Par alain.bernard dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 25/01/2014, 15h18
  2. [Débutant] TreeViewer & JFace DataBinding
    Par pingoui dans le forum Eclipse Platform
    Réponses: 27
    Dernier message: 16/08/2010, 17h07
  3. [EJB2.1] Référence entre beans
    Par onlytoine dans le forum Java EE
    Réponses: 11
    Dernier message: 22/10/2004, 15h12

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