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 :

[Binding] comboviewer et propriété objet.


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut [Binding] comboviewer et propriété objet.
    J'ai un comboViewer que je cherche à baser sur une classe metier RefQualite.
    Sa sélection initiale (ou celle de la combo associée) n'est pas correcte.
    Les changement de l'UI semble bien impacter les classes metier, mais l'UI n'est pas correctement initialisé (la liste de choix est ok, mais sans sélection) au moment binding UI/objet metier.

    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class RefQualite extends ModelObject implements Persist<String>
    {
    	private String codeQualite;
    	private String libelleQualite;
    //.. accesseurs etc...
    }
    Cette classe est une propriété d'un classe agent :
    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
    public class Agent extends ModelObject implements Persist<Integer>
    {
    	private String matriculeNG;	
    	private Integer idAgent;
    	private RefQualite qualite;
    	private String nom;
    	private String prenom;
    	private Date dateNaissance;
    	private String adresse;
    	private String codePostal;
    	private String ville;
    	private RefPays pays;
    	private String telephone;
    	private String email;
    	private RefMetier metier;
    	private RefStatutMetier statutMetier;
    //... accesseurs etc....
    }
    J'ai chopper ModelObjet sur le net :
    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
    import java.beans.PropertyChangeListener;
    import java.beans.PropertyChangeSupport;
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
     
    public class ModelObject {
    	private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(
    			this);
    	private String id;
     
    	public void addPropertyChangeListener(PropertyChangeListener listener) {
    		propertyChangeSupport.addPropertyChangeListener(listener);
    	}
     
    	public void addPropertyChangeListener(String propertyName,
    			PropertyChangeListener listener) {
    		propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
    	}
     
    	public void removePropertyChangeListener(PropertyChangeListener listener) {
    		propertyChangeSupport.removePropertyChangeListener(listener);
    	}
     
    	public void removePropertyChangeListener(String propertyName,
    			PropertyChangeListener listener) {
    		propertyChangeSupport.removePropertyChangeListener(propertyName,
    				listener);
    	}
     
    	protected void firePropertyChange(String propertyName, Object oldValue,
    			Object newValue) {
    		propertyChangeSupport.firePropertyChange(propertyName, oldValue,
    				newValue);
    	}
     
    	protected void firePropertyChange(String propertyName, int oldValue,
    			int newValue) {
    		propertyChangeSupport.firePropertyChange(propertyName, oldValue,
    				newValue);
    	}
     
    	protected void firePropertyChange(String propertyName, boolean oldValue,
    			boolean newValue) {
    		propertyChangeSupport.firePropertyChange(propertyName, oldValue,
    				newValue);
    	}
     
    	public void setId(String string) {
    		Object oldValue = id;
    		id = string;
    		firePropertyChange("id", oldValue, id);
    	}
     
    	protected Object[] append(Object[] array, Object object) {
    		List newList = new ArrayList(Arrays.asList(array));
    		newList.add(object);
    		return newList.toArray((Object[]) Array.newInstance(array.getClass()
    				.getComponentType(), newList.size()));
    	}
     
    	protected Object[] remove(Object[] array, Object object) {
    		List newList = new ArrayList(Arrays.asList(array));
    		newList.remove(object);
    		return newList.toArray((Object[]) Array.newInstance(array.getClass()
    				.getComponentType(), newList.size()));
    	}
     
    }
    Coté UI, je crée le comboviewer ainsi :
    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
    /**
             * This method initializes qualiteCombo 
             *
             */
    	private void createQualiteCombo()
    	{
    		qualiteCombo = new Combo(infoAdminGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
    		qualiteComboViewer = new ComboViewer(qualiteCombo);
     
    		try
    		{
    			List<RefQualite> refQualiteList = DataModelManager.getInstance().getAll(RefQualite.class);
    			//Ajout d'une ligne vide dans la combo
    			refQualiteList.add(0,new RefQualite());
    			qualiteComboViewer.setLabelProvider(new LabelProvider(){
    				public String getText(Object arg0)
    				{
    					RefQualite refQualite = ((RefQualite)arg0);
    					if(refQualite==null)
    						return "";
    					else
    						return refQualite.getLibelleQualite();
    				}
    			});
    			qualiteComboViewer.setContentProvider(new ArrayContentProvider());
    			qualiteComboViewer.setInput(refQualiteList);
    		}
    		catch (SQLException e)
    		{			
    			e.printStackTrace();
    		}
    	}
    Et après j'associe un agent à cette derniere, je fais un binding comme ça :
    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
    protected void bind(Agent agt)
    	{
    		//S'il y avait un binding précédent on le supprime 
    		//pour éviter que l'interface n'écrite sur le nouvel agent 
    		if(dbc!=null)
    		{
    			dbc.dispose();	
    		}
    		//sinon on ajoute un listener qui "disposera" le binding à la suppression
    		// du composant parant.
    		else
    		{
    			this.addDisposeListener(new DisposeListener() {
    		        public void widgetDisposed(DisposeEvent e) {
    		            dbc.dispose();
    		        }
    		    });
    		}
                    dbc =new DataBindingContext();
    		// On associe chaque composant UI à une propriété de l'instance courante
    		// d'agent
    //ceci pose pb, ici 'qualite' est une instance de classe RefQualite				dbc.bindValue(ViewersObservables.observeSingleSelection(qualiteComboViewer),
    				BeansObservables.observeValue(agt, "qualite"), 
    				null, null);
     
    //ceci fonctionne mais 'matricule' n'est qu'une simple class String
    dbc.bindValue(SWTObservables.observeText(matriculeText,
    				SWT.Modify|SWT.FocusOut),
    				BeansObservables.observeValue(agt, "matricule"), 
    				null, null);
    La combo UI ne se place pas initialement sur la bonne valeur, alors que les changement on bien l'air d'être répercuter coté model métier, l'UI n'est pas alimenté par le model métier.

    Toute aide sera la bienvenue .

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Pour le moment comme mon model n'est modifier que par une vue, je peux me contenter de faire après le binding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(agt.getQualite()!=null)
    	qualiteCombo.setText(agt.getQualite().getLibelleQualite());
    Mais ca me parrait plutôt crado.
    Je trouve pas d'exemple équivalents dans http://wiki.eclipse.org/JFace_Data_Binding/Snippets

Discussions similaires

  1. Binding sur une propriété avec paramètre
    Par FRED.G dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 17/11/2008, 18h38
  2. DW graph : syntaxe pour manipuler propriétés objet Graph
    Par Grosse_Mite dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 23/06/2008, 18h27
  3. [Databinding] bind sur une propriété d'une collection
    Par herveb dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 11/12/2007, 10h35
  4. [Active Directory - C#] Récupération propriété objet AD
    Par psedo dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 12/04/2007, 00h41
  5. propriété objet visible
    Par Pfeffer dans le forum 4D
    Réponses: 5
    Dernier message: 26/07/2006, 13h13

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