Unterschiede

Hier werden die Unterschiede zwischen der gewählten und der aktuellen Version gezeigt.

eclipse-rcp:binding 2008/05/08 12:57 eclipse-rcp:binding 2020/09/25 09:41 aktuell
Zeile 1: Zeile 1:
-[[eclipse-rcp|Eclipse-RCP]]+[[eclipse-rcp|Java - Eclipse-RCP]]
- +====== Eclipse - Binding (ab Eclipse 3.3) ====== 
-====== Eclipse - Binding (Eclipse 3.3) ====== +JFace-Data-Binding ab Eclipse 3.3\\
-JFace-Data-Binding Eclipse 3.3\\+
\\ \\
In einem gedachten Beispiel soll ein Model aus den drei Attributen\\ In einem gedachten Beispiel soll ein Model aus den drei Attributen\\
Zeile 9: Zeile 8:
  * Vorname\\   * Vorname\\
  * Geburtsdatum\\   * Geburtsdatum\\
-bestehen. +bestehen.\\ 
 +\\ 
 +<html> 
 +  <script type="text/javascript"><!-- 
 +      google_ad_client="pub-9681858985507948"; 
 +      google_ad_width = 468; 
 +      google_ad_height = 60; 
 +      google_ad_format = "468x60_as"; 
 +      google_ad_type = "text"; 
 +      google_ad_channel = ""; 
 +      google_color_border = "cccccc"; 
 +      google_color_bg = "FFFFFF"; 
 +      google_color_link = "1d2d8c"; 
 +      google_color_text = "000000"; 
 +      google_color_url = "1d2d8c"; 
 +      //--> 
 +  </script> 
 +  <script type="text/javascript" 
 +      src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 
 +  </script> 
 +</html> 
 +\\
===== Binding-Methode ===== ===== Binding-Methode =====
-Die Binding-Methode kann beispielsweise in der MyFormPart-Klasse implementiert werden. +Die Binding-Methode kann beispielsweise in der MyFormPart-Klasse implementiert werden.\\ 
 +\\
<code java> <code java>
private void bind(model) { private void bind(model) {
  m_bindingContext = new DataBindingContext();   m_bindingContext = new DataBindingContext();
-  Binding binding; +  // Das Textfeld ";m_lastnameTxt" für den Nachnamen an das Model-Attribut "m_lastname" binden: 
-         +  m_bindingContext.bindValue(SWTObservables.observeText(m_lastnameTxt, 
-  binding = m_bindingContext.bindValue(SWTObservables.observeText(m_lastnameTxt, +         SWT.Modify), BeansObservables.observeValue(model, MyModel.PROP_LASTNAME), null, null);
-             SWT.Modify), BeansObservables.observeValue(model, Model.PROP_LASTNAME), null, null);+
-  binding = m_bindingContext.bindValue(SWTObservables.observeText(m_firstnameTxt, +  // Das Textfeld "m_firstnameTxt" für den Nachnamen an das Model-Attribut "m_firstname" binden: 
-             SWT.Modify), BeansObservables.observeValue(model, Model.PROP_FIRSTNAME), null, null);+  m_bindingContext.bindValue(SWTObservables.observeText(m_firstnameTxt, 
 +         SWT.Modify), BeansObservables.observeValue(model, MyModel.PROP_FIRSTNAME), null, null); 
 +   
 +  // Das Textfeld "m_birthdateTxt" für den Nachnamen an das Model-Attribut "m_birthday" binden: 
 +  m_bindingContext.bindValue(SWTObservables.observeText(m_birthdateTxt, 
 +        SWT.Modify), BeansObservables.observeValue(model, MyModel.PROP_BIRTHDAY),  
 +        m_targetToModelStrategy, m_modelToTargetStrategy);
 +  // UpdateStrategy initialisieren (Konverter und Validatoren festlegen):
  initUpdateStrategy();   initUpdateStrategy();
-  binding = m_bindingContext.bindValue(SWTObservables.observeText(m_birthdateTxt, 
-            SWT.Modify), BeansObservables.observeValue(model, IModel.PROP_BIRTHDAY),  
-            m_targetToModelStrategy, m_modelToTargetStrategy); 
} }
</code> </code>
- +\\ 
-Der Aufruf erfolgt dann in der setFormInput(..) Methode:+Der Aufruf erfolgt dann in der setFormInput(..) Methode:\\
<code java> <code java>
@Override @Override
public boolean setFormInput(final Object input){ public boolean setFormInput(final Object input){
-  Model model = (Model)input;+  MyModel model = (MyModel)input;
  bind(model);   bind(model);
} }
-</code> +</code>\\ 
- +\\ 
- +\\ 
- +\\
- +
===== Methode initUpdateStrategy() ===== ===== Methode initUpdateStrategy() =====
-Da diese Methode von der bind()-Methode aufgerufen wird, muss sie natürlich für diese erreichbar sein.+Da diese Methode von der bind()-Methode aufgerufen wird, muss sie natürlich für diese erreichbar sein.\\
<code java> <code java>
private void initUpdateStrategy(){ private void initUpdateStrategy(){
  IConverter date2StrConverter = new IConverter() {   IConverter date2StrConverter = new IConverter() {
-  public Object convert(Object fromObject) { +      public Object convert(Object fromObject) { 
-     assert fromObject instanceof Date; +         assert fromObject instanceof Date; 
-     Date date = (Date) fromObject; +         Date date = (Date) fromObject
-        return DateConv.toLocalizedString(date, false);+        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy")
 +        return sdf.format(date);
      }       }
Zeile 72: Zeile 93:
        assert fromObject instanceof String;         assert fromObject instanceof String;
        String str = (String) fromObject;         String str = (String) fromObject;
-        return DateConv.toDate(str);+        SimpleDateFormat sd = new SimpleDateFormat("dd.MM.yyyy");  
 +        Date date = null; 
 +        try { 
 +            Date newDate = sd.parse(dateString)
 +        } catch (Exception e) { 
 +            e.printstacktrace(); 
 +        } 
 +        return date;
      }       }
Zeile 118: Zeile 146:
  m_modelToTargetUpdateStrategy1 = new UpdateValueStrategy();   m_modelToTargetUpdateStrategy1 = new UpdateValueStrategy();
 +// oder bei spezieller Policy (Default: UpdateValueStrategy.POLICYUPDATE)
 +// m_modelToTargetUpdateStrategy1 = new UpdateValueStrategy(UpdateValueStrategy.NEVER);
  m_modelToTargetUpdateStrategy1.setConverter(date2StrConverter);   m_modelToTargetUpdateStrategy1.setConverter(date2StrConverter);
  m_targetToModelUpdateStrategy = new UpdateValueStrategy();   m_targetToModelUpdateStrategy = new UpdateValueStrategy();
Zeile 125: Zeile 155:
} }
</code> </code>
- +\\ 
- +\\ 
 +\\
===== Model-Klasse ===== ===== Model-Klasse =====
Zeile 135: Zeile 165:
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
-public class Model implements IModel, IPropertyChangeSupport +public class MyModel
-  String PROP_LASTNAME                                       = "lastname";         //$NON-NLS-1$ +  String PROP_LASTNAME = "lastname";  
-  String PROP_FIRSTNAME                                       = "firstname";       //$NON-NLS-1$ +  String PROP_FIRSTNAME = "firstname"; 
-  String PROP_BIRTHDAY                                       = "birthday";         //$NON-NLS-1$+  String PROP_BIRTHDAY = "birthday";
  private final PropertyChangeSupport m_propertyChangeSupport = new PropertyChangeSupport();   private final PropertyChangeSupport m_propertyChangeSupport = new PropertyChangeSupport();
       
Zeile 145: Zeile 175:
  private Date  m_birthday;   private Date  m_birthday;
-  public Model(String lastname, String firstname, Date birthday) {+  public MyModel(String lastname, String firstname, Date birthday) {
      m_lastname = lastname;       m_lastname = lastname;
      m_firstname = firstname;       m_firstname = firstname;
Zeile 203: Zeile 233:
} }
</code> </code>
 +\\
 +\\
 +\\
 +===== Button-Enablement an Validationstatus binden =====
 +<code java>
 +  public void bindButtonEnablementToValidationStatus(final Button button) {
- +    final IObservableValue buttonEnable = SWTObservables.observeEnabled(button); 
- +   final IObservableValue validationStatus = 
 +     new AggregateValidationStatus(myBindingContext.getValidationRealm(), myBindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY); 
 +    myBindingContext.bindValue(buttonEnable, 
 +                              validationStatus, 
 +                              new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), 
 +                              new UpdateValueStrategy().setConverter(new Converter(IStatus.class, Boolean.TYPE) { 
 +                                @Override 
 +                                public Object convert(final Object fromObject) { 
 +                                  return new Boolean(((IStatus) fromObject).isOK()); 
 +                                } 
 +                              })); 
 +  } 
 +</code> 
 +\\ 
 +\\ 
 +\\
===== Fehlersuche ===== ===== Fehlersuche =====
-Wird eine setXYZ(..)-Methode nicht gefunden, so sollte als Erstes die Schreibweise der Property-Konstanten (hier: PROP_XXXXX) überprüft werden. Diese muss genauso geschrieben werden wie die get und set-Methoden. Lediglich das get und set wird weggelassen und der erste Buchstabe wird kleingeschrieben. +Wird eine setXYZ(..)-Methode nicht gefunden, so sollte als Erstes die Schreibweise der Property-Konstanten (hier: PROP_XXXXX) überprüft werden. Diese muss genauso geschrieben werden wie die get und set-Methoden. Lediglich das get und set wird weggelassen und der erste Buchstabe wird kleingeschrieben.\\ 
-Beispiel:+Beispiel:\\
es gäbe die Methoden getValue() und setValue(int newValue), so müsste die Konstante als "value" definiert werden.\\ es gäbe die Methoden getValue() und setValue(int newValue), so müsste die Konstante als "value" definiert werden.\\
-Beispiel: +Beispiel:\\ 
-<code java>PROP_VALUE = "value";</code>+<code java>public static final String PROP_VALUE = "value";</code>\\
Als Zweites kann man einen Breakpoint in der Methode ValueBinding#doUpdate(..) setzen (z.B. beim Aufruf der Methode updateValueStrategy.doSet(..)) um den Fehler zu finden.\\ Als Zweites kann man einen Breakpoint in der Methode ValueBinding#doUpdate(..) setzen (z.B. beim Aufruf der Methode updateValueStrategy.doSet(..)) um den Fehler zu finden.\\
-Achtung! In Eclipse 3.3 gibt es einen Fehler: Die PropertyMethode/die Property-Konstante darf niemals mit zwei Großbuchstaben beginnen (also nicht: getVAlue() mit "vAlue")!!+Achtung! In Eclipse 3.3 gibt es einen Fehler: Die PropertyMethode/die Property-Konstante darf niemals mit zwei Großbuchstaben beginnen (also nicht: getVAlue() mit "vAlue")!!\\

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007