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 .