El Google API Libraries for Google Web Toolkit (como gwt-visualization.jar) solo está pensado para el uso en el lado del cliente (para generar javascript). Afortunadamente, Google también proporciona el código java del lado del servidor para publicar DataTables en su Google Visualization Data Source Library.
Aquí está la configuración que me permitió generar DataTables en el servidor en una llamada a procedimiento remoto, devolverlos al cliente como una cadena JSON, y usar Google Visualizations para Google Web Toolkit para mostrar un buen gráfico de Google en el página web del cliente. Estoy usando Eclipse Indigo con Google Web Toolkit 2.4.0.
- añadir la biblioteca cliente de enlace API gwt-visualization.jar GWT a la ruta de compilación de su proyecto, y como un módulo heredado en la descripción de su propio módulo:
En src/com.package.name/nombre-proyecto.xml:
<inherits name='com.google.gwt.visualization.Visualization'/>
- Añadir el tarro para el Google Visualization Data Source Library y todos los frascos de dependencia incluidas para proyectar/war/WEB-INF/lib para el código de servidor para utilizar
- Definir una interfaz de procedimiento remoto que devuelve una cuerda:
En cliente/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 cliente/TableSe rviceAsync.java:
package com.clark.demos.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface TableServiceAsync {
void getTable(AsyncCallback<String> callback);
}
En war/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>
- implementar el servicio de "mesa" en el servidor:
En Servidor/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();
}
}
- tiene código de cliente llamar al servicio de "mesa" y construir un DataTable de la cadena JSON devuelto:
En cliente/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);
}
Código de ejemplo encontrado en https://github.com/RichDickClark/gwt-google-charts-demo.git
Obtengo "com.google.gwt.core.client.JavaScriptException: (TypeError): $ wnd.google.visualization no está definido" ... tengo y si es así, ¿dónde lo hago? tener que cargar bibliotecas o API? Me gustaría utilizar esto en Widget GWT en el lado del cliente ... –