samedi 2 juin 2007
Databinding SWT Text: Eclipse 3.3
Par tatemilio, samedi 2 juin 2007 à 11:12
Voici un post permettant d'effectuer un bind entre des objets graphiques (org.eclipse.swt.widgets.Text) et un objet métier.
Imaginons une vue permettant de créer un utilisateur. Cette vue contient 2 zones Text permettant de saisir le nom et le prénom de l'utilisateur et un bouton de création.
L'utilisateur est modélisé par une classe métier qui peut ressembler à ça:
public class Utilisateur{ // Nom de l'utilisateur private String nom; // Prénom de l'utilisateur private String prenom; // Getters Setters public String getNom() { return nom; } public void setNom(String nom { this.nom = nom } public String getPrenom() { return prenom; } public void setPrenom(String prenom { this.prenom = prenom } }
Jusque là rien d'extraordinaire, passons maintenant à la création de l'utilisateur par l'intermédiaire de la vue RCP. Lorsque le nom et le prénom sont renseignés, il faut clicquer sur créer, dès lors il y a deux possibilités:
1) Instancier la classe utilisateur et "peupler" les attributs nom et prénoms manuellement en récupérant les valeurs saisies et utliser les setters.
2) utiliser le Databing pour que les attributs de la classe utilisateur soient peuplés automatiquement.
Voici le code qui permet de le faire:
Utilisateur utilisateur = new Utilisateur(); DataBindingContext db = new DataBindingContext(); Realm realm = SWTObservables.getRealm(display); // Nom de l'utilisateur db.bindValue(SWTObservables.observeText(txtNom,SWT.Modify), BeansObservables.observeValue(realm, utilisateur, "nom"), null, null); // Prenom de l'utilisateur db.bindValue(SWTObservables.observeText(txtPrenom,SWT.Modify), BeansObservables.observeValue(realm, utilisateur, "prenom"), null, null);
Je n'ai pas tout détailler au niveau de la vue RCP, il faudra adapter ce code pour l'utiliser dans vos applications néanmoins le principal est là.
Dernière remarque et de taille, le bind est bi-directionnel cela signifie que si vous alimentez les attributs de l'objet métiers les objets graphiques prendront les valeurs définies.