Thanks Thomas, that was really helpful.

I was able to get it working using generics.

Here is a sample code if anyone else is interested (here Input is a 
Composite encapsulating an input element):

public class InputEditor<T>
 extends Input
 implements LeafValueEditor<T> {

 @UiConstructor
 public InputEditor(String label, InputSize size, InputType type) {
    super(label, size, type);
 }

 private T value;

 @Override
 public T getValue() {
    String theTextValue = getText();

    Object theGenericValue = theTextValue;

    if (value instanceof Integer) {
       theGenericValue = Integer.parseInt(theTextValue);
    } else if (value instanceof Float) {
       theGenericValue = Float.parseFloat(theTextValue);
    }

    this.value = (T) theGenericValue;

    return this.value;
 }

 @Override
 public void setValue(T value) {
    this.value = value;

    String theTextValue = value == null ? "" : value.toString();

    setText(theTextValue);
 }
}


And simply use it (along with editor driver) like:


@UiField InputEditor<String> name;
@UiField InputEditor<Float> area;



All works well now, only word of caution: the SDM cache and the generated 
code sometimes would make it appear that the editor implementation doesn't 
flush correctly.
A mvn clean/sdm cache clean resolves this issue.

Thanks,
Harsh


On Friday, April 21, 2017 at 5:41:38 AM UTC-4, Thomas Broyer wrote:
>
>
>
> On Wednesday, April 19, 2017 at 8:19:52 PM UTC+2, harshyadav wrote:
>>
>> Hi,
>>
>> I am trying to use the GWT editor framework to support data binding in my 
>> application. While implementing it I ran into a few issues and have a 
>> couple of questions regarding the same:
>>
>> 1) Some of these components don't use 
>> com.google.gwt.user.*
>>
>>   rather they use 
>> com.google.gwt.dom.client.*
>>
>>  For e.g. InputElement as opposed to TextBox. Is it possible to use 
>> editor framework with dom elements?
>>
>
> Yes.
> There are several ways.
> Either your "composite editor" implements ValueAwareEditor; in setValue 
> extracts values from object properties and put them into the elements, on 
> flush() do the reverse.
> @Override public void setValue(MyObj value) {
>   this.value = value;
>   myInputElement.setValue(value.getProp());
> }
> @Override public void flush() {
>   this.value.setProp(myInputElement.getValue());
> }
> Or use "child" editors for each element, implement a LeafValueEditor that 
> delegates to the element in setValue/getValue.
> final LeafValueEditor<String> myInputElementEditor = new 
> LeafValueEditor<String>() {
>   @Override public String getValue() { return myInputElement.getValue(); }
>   @Override public void setValue(String value) { 
> myInputElement.setValue(value); }
> };
>
> 2) Is it possible to bind POJO's with different field types (int, float, 
>> String, etc.) to a single Composite implementing IsEditor?
>> For e.g. if there is an Input composite (wrapping TextBox), is it 
>> possible to use the same composite for POJO fields of different types int, 
>> float, etc. ?
>>
>> public class Test
>>  implements Serializable {
>>
>>  private Integer id;
>>
>>  private String name;
>>
>>  private float area;
>> }
>>
>>
>> Here name and area are of different type. Is it possible to bind these to 
>> the same widget implementing Editor (without editor I would just parse the 
>> values to and from String to their respective types before saving the data)?
>>
>
> The editor would have to have a generic type parameter (class MyEditor<T> 
> implements LeafValueEditor<T>) and a way to convert the value it receives 
> to/from String (e.g. passing converters to the constructor?)
> Have a look at how ValueBox works.
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to