Skip to main content

SuggestBox in GWT UiBuinder

I am currently working also on a project hosted on Google App Engine (http://appspot.com) and I want to share some tips about some of the frameworks offered by the GAE environment.
Today I want to talk about a problem we had using the GWT SuggestBox component while making UiBinder layouts. The class com.google.gwt.user.client.ui.SuggestBox is a text box or text area which displays a pre-configured set of selections that match the user's input. Each SuggestBox is associated with a single com.google.gwt.user.client.ui.SuggestOracle. The SuggestOracle is used to provide a set of selections given a specific query string. Our application provides a method to retrieve suggestions from the backend while a user writes into the SuggestBox. This worked fine with a GWT Java layout, but moving to UiBinder layout we faced the following problem. We added a SuggestBox to a view through the GWT designer. The code generated was the following:

View.ui.xml:
<g:SuggestBox ui:field="fromSuggestBox"/>
View.java:

@UiField
SuggestBox fromSuggestBox;
Then we added to the View class the method to populate the MultiWordSuggestOracle to be passed to the SuggestBox:
private MultiWordSuggestOracle createOracle() {
        MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
        ...
        // Code to retrieve values
        ...
        return oracle;
}
So we set the attribute provided to true for the @UiField annotation
@UiField(provided = true)
SuggestBox fromSuggestBox;
and tried to manually create the SuggestBox instance into the constructor of the View class before invoking 
the initWidget method
public Tracking(String firstName) {
        SuggestBox fromSuggestBox = new SuggestBox(createOracle());
        initWidget(uiBinder.createAndBindUi(this));
}
But the application throwed an exception at runtime while rendering the view. This doesn't work. The only way to populate a SuggestBox in a UiBinder view is to create the Suggest Box instance while declaring it

@UiField(provided = true)
SuggestBox fromSuggestBox = new SuggestBox(createOracle());
and not inside the View class constructor.


Comments

  1. Thanks a lot.. spend a lot of time in rectifying the error...
    It will work only when we declare like -
    @UiField(provided = true)
    SuggestBox box = new SuggestBox(createOracle());

    ReplyDelete

Post a Comment

Popular posts from this blog

Exporting InfluxDB data to a CVS file

Sometimes you would need to export a sample of the data from an InfluxDB table to a CSV file (for example to allow a data scientist to do some offline analysis using a tool like Jupyter, Zeppelin or Spark Notebook). It is possible to perform this operation through the influx command line client. This is the general syntax: sudo /usr/bin/influx -database '<database_name>' -host '<hostname>' -username '<username>'  -password '<password>' -execute 'select_statement' -format '<format>' > <file_path>/<file_name>.csv where the format could be csv , json or column . Example: sudo /usr/bin/influx -database 'telegraf' -host 'localhost' -username 'admin'  -password '123456789' -execute 'select * from mem' -format 'csv' > /home/googlielmo/influxdb-export/mem-export.csv

jOOQ: code generation in Eclipse

jOOQ allows code generation from a database schema through ANT tasks, Maven and shell command tools. But if you're working with Eclipse it's easier to create a new Run Configuration to perform this operation. First of all you have to write the usual XML configuration file for the code generation starting from the database: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-2.0.4.xsd">   <jdbc>     <driver>oracle.jdbc.driver.OracleDriver</driver>     <url>jdbc:oracle:thin:@dbhost:1700:DBSID</url>     <user>DB_FTRS</user>     <password>password</password>   </jdbc>   <generator>     <name>org.jooq.util.DefaultGenerator</name>     <database>       <name>org.jooq.util.oracle.OracleDatabase</name>     ...

Using Rapids cuDF in a Colab notebook

During last Spark+AI Summit Europe 2019 I had a chance to attend a talk from Miguel Martinez  who was presenting Rapids , the new Open Source framework from NVIDIA for GPU accelerated end-to-end Data Science and Analytics. Fig. 1 - Overview of the Rapids eco-system Rapids is a suite of Open Source libraries: cuDF cuML cuGraph cuXFilter I enjoied the presentation and liked the idea of this initiative, so I wanted to start playing with the Rapids libraries in Python on Colab , starting from cuDF, but the first attempt came with an issue that I eventually solved. So in this post I am going to share how I fixed it, with the hope it would be useful to someone else running into the same blocker. I am assuming here you are already familiar with Google Colab. I am using Python 3.x as Python 2 isn't supported by Rapids. Once you have created a new notebook in Colab, you need to check if the runtime for it is set to use Python 3 and uses a GPU as hardware accelerator. You...