Будучи любителем, даже я хотел сделать то же самое, но у SmartGwt было очень мало возможностей. Только версия SmartGwt Pro / Power / EE обладает такой функциональностью. Однако я нашел решение для этого, и код прилагается, поскольку там пока нет примеров, и если кто-то, кто не знаком с GWT, как я, вам придется потратить на это все время. Следующий пример кода прост и понятен.
public class GridToCSV implements EntryPoint {
/**
* Create a remote service proxy to talk to the server-side Greeting
* service.
*/
private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
public void onModuleLoad() {
DataSource dataSource = new DataSource();
dataSource.setDataFormat(DSDataFormat.JSON);
dataSource.setDataURL("data/countries_small.js");
DataSourceTextField nameField = new DataSourceTextField("name", "Name");
DataSourceTextField populationfield = new DataSourceTextField(
"population", "Population");
DataSourceTextField areaField = new DataSourceTextField("total_area",
"Total Area");
DataSourceTextField governmentField = new DataSourceTextField(
"government", "Government");
dataSource.setFields(nameField, populationfield, areaField,
governmentField);
final ListGrid grid = new ListGrid();
grid.setDataSource(dataSource);
grid.setWidth100();
grid.setHeight(150);
grid.setAutoFetchData(true);
IButton button = new IButton("Export CSV");
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
StringBuilder exportedCSV = exportCSV(grid);
System.out.println(exportedCSV);
sendTOServer(exportedCSV);
// Window.Location(listGrid.exportData());
}
});
//grid.draw();
//button.draw();
VLayout layout = new VLayout(); layout.addMember(button);
layout.addMember(grid);
layout.addMember(button);
layout.setWidth100();
layout.draw();
}
private StringBuilder exportCSV(ListGrid listGrid) {
StringBuilder stringBuilder = new StringBuilder(); // csv data in here
// column names
ListGridField[] fields = listGrid.getFields();
for (int i = 0; i < fields.length; i++) {
ListGridField listGridField = fields[i];
stringBuilder.append("\"");
stringBuilder.append(listGridField.getName());
stringBuilder.append("\",");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // remove last
// ","
stringBuilder.append("\n");
// column data
ListGridRecord[] records = listGrid.getRecords();
for (int i = 0; i < records.length; i++) {
ListGridRecord listGridRecord = records[i];
ListGridField[] listGridFields = listGrid.getFields();
for (int j = 0; j < listGridFields.length; j++) {
ListGridField listGridField = listGridFields[j];
stringBuilder.append("\"");
stringBuilder.append(listGridRecord.getAttribute(listGridField
.getName()));
stringBuilder.append("\",");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // remove
// last ","
stringBuilder.append("\n");
}
return stringBuilder;
}
private void sendTOServer(StringBuilder csvText) {
// TODO Auto-generated method stub
String csv = csvText.toString();
final HTML serverResponseLabel = new HTML();
greetingService.greetServer(csv, new AsyncCallback<String>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(String result) {
// dialogBox.setText("Remote Procedure Call");
serverResponseLabel.removeStyleName("serverResponseLabelError");
serverResponseLabel.setHTML(result);
Window.open(result, "_blank", "");
// dialogBox.center();
// closeButton.setFocus(true);
}
});
}
}
GreetingService.java
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
String greetServer(String name) throws IllegalArgumentException;
}
GreetingServiceAsync.java
public interface GreetingServiceAsync {
void greetServer(String input, AsyncCallback<String> callback)
throws IllegalArgumentException;
}
GreetingServiceImpl.java
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {
String url;
public String greetServer(String input) throws IllegalArgumentException {
FileWriter fw;
try {
fw = new FileWriter("WriteTest.csv");
PrintWriter pw = new PrintWriter(fw);
// Write to file for the first row
url = "http://127.0.0.1:8888/WriteTest.csv";
pw.print(input);
pw.flush();
// Close the Print Writer
pw.close();
// Close the File Writer
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return url;
}
}
Приведенный выше код работает, и его легко и просто понять. Я использовал стандартную структуру тестового проекта GWT для всех, чтобы понять. Код, использованный для части ListGrid, был использован из витрины smartgwt Интеграция ListGrid JSON . Пожалуйста, дайте мне знать, если вам нужно больше ясности для предоставленного решения.