Les Google API Libraries for Google Web Toolkit (tels que gwt-visualization.jar) sont uniquement destinés à être utilisés côté client (pour générer du javascript). Heureusement, Google fournit également le code Java côté serveur pour la publication de DataTables dans leur Google Visualization Data Source Library.
Voici la configuration qui m'a permis de générer des DataTables sur le serveur dans un appel de procédure distante, de les renvoyer au client en tant que chaîne JSON et d'utiliser Google Visualizations pour Google Web Toolkit page Web client. J'utilise Eclipse Indigo avec Google Web Toolkit 2.4.0.
- Ajouter la bibliothèque cliente de liaison API GWT gwt-visualization.jar au chemin de la construction de votre projet, et en tant que module hérité dans votre propre description du module:
dans src/com.package.name/nom-projet.xml:
<inherits name='com.google.gwt.visualization.Visualization'/>
- Ajouter le pot pour le Google Visualization Data Source Library et tous les pots de dépendance inclus à PROJET/war/WEB-INF/lib pour le code serveur à utiliser
- Définir une interface de procédure distante qui renvoie un chaîne:
client/TableService.java:
package com.clark.demos.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("table")
public interface TableService extends RemoteService {
String getTable();
}
En client/TableSe rviceAsync.java:
package com.clark.demos.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface TableServiceAsync {
void getTable(AsyncCallback<String> callback);
}
Dans la guerre/WEB-INF/web.xml:
<servlet>
<servlet-name>tableServlet</servlet-name>
<servlet-class>com.clark.demos.server.TableServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>tableServlet</servlet-name>
<url-pattern>/google_visualization___gwt/table</url-pattern>
</servlet-mapping>
- Mettre en oeuvre le service "table" sur le serveur:
Dans le serveur/TableServiceImpl.java:
package com.clark.demos.server;
import com.google.visualization.datasource.datatable.ColumnDescription;
import com.google.visualization.datasource.datatable.DataTable;
import com.google.visualization.datasource.datatable.value.ValueType;
import com.google.visualization.datasource.render.JsonRenderer;
@SuppressWarnings("serial")
public class TableServiceImpl extends RemoteServiceServlet implements
TableService {
@Override
public String getTable() {
DataTable data = new DataTable();
data.addColumn(new ColumnDescription("Task", ValueType.TEXT, "Task"));
data.addColumn(new ColumnDescription("Stemming", ValueType.NUMBER, "Stemming"));
data.addColumn(new ColumnDescription("NoStemming", ValueType.NUMBER, "No Stemming"));
data.addRowFromValues("Fire", 1.0, 0.8);
data.addRowFromValues("Flood", 0.5, 0.65);
return JsonRenderer.renderDataTable(data, true, false, false).toString();
}
}
- Demandez appel code client le service "table" et construire un DataTable de la chaîne JSON retournée:
Client/gwt-visualization-demo.java:
/**
* Create a remote service proxy to talk to the server-side Table service.
*/
private final TableServiceAsync tableService = GWT
.create(TableService.class);
public static native DataTable toDataTable(String json) /*-{
return new $wnd.google.visualization.DataTable(eval("(" + json + ")"));
}-*/;
public void onModuleLoad() {
// Create a callback to be called when the visualization API
// has been loaded.
Runnable onLoadCallback = new Runnable() {
public void run() {
final Panel panel = RootPanel.get();
tableService.getTable(new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
AbstractDataTable data = toDataTable(result);
BarChart pie = new BarChart(data, createOptions());
pie.addSelectHandler(createSelectHandler(pie));
panel.add(pie);
}
@Override
public void onFailure(Throwable caught) {
}
});
}
};
// Load the visualization api, passing the onLoadCallback to be called
// when loading is done.
VisualizationUtils.loadVisualizationApi(onLoadCallback, BarChart.PACKAGE);
}
Exemple de code trouvé à https://github.com/RichDickClark/gwt-google-charts-demo.git
Je reçois "com.google.gwt.core.client.JavaScriptException: (TypeError): $ wnd.google.visualization est indéfini" ... ai-je et si oui, où puis-je avoir à charger des bibliothèques ou des API? Je voudrais l'utiliser dans Widget GWT du côté client ... –