2011/3/25 Ankit <shahankit@gmail.com>
Hi All,
I am new to the GWT looking for some help in the following code.
Basically want to iterate over some json data and display it in a cell
Table.
Here is how it looks like.
(1) JsonIntegrate.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='jsonintegrate'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User'/>
<!-- Inherit the default GWT style sheet. You can change -->
<!-- the theme of your GWT application by uncommenting -->
<!-- any one of the following lines. -->
<inherits name='com.google.gwt.user.theme.standard.Standard'/>
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
<!-- Other module inherits -->
<inherits name="com.google.gwt.http.HTTP" />
<!-- Specify the app entry point class. -->
<entry-point class='com.symantec.mmavis.gwt.client.JsonIntegrate'/>
<!-- Specify the paths for translatable code -->
<source path='client'/>
<source path='shared'/>
</module>
(2) Client.
JsonIntegrate.java
package com.symantec.mmavis.gwt.client;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.ColumnSortList;
import com.google.gwt.user.cellview.client.TextColumn;
import
com.google.gwt.user.cellview.client.ColumnSortEvent.AsyncHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.Range;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class JsonIntegrate implements EntryPoint {
// The list of data to display.
//ResultData rs1 = new ResultData();
//private static List<Contact> CONTACTS = Arrays.asList(new
Contact("John", "123 Fourth Road"), new Contact("Mary", "222 Lancer
Lane"), new Contact("Zander", "94 Road Street"));
private static final String JSON_URL = GWT.getModuleBaseURL() +
"search?q=5";
private ListDataProvider<SearchResult> dataProvider = new
ListDataProvider<SearchResult>();
private final ArrayList<SearchResult> contactList = new
ArrayList<SearchResult>();
public void onModuleLoad() {
// Create a CellTable.
final CellTable<SearchResult> table = new CellTable<SearchResult>();
// Create ordernumber column.
final TextColumn<SearchResult> orderColumn = new
TextColumn<SearchResult>() {
@Override
public String getValue(final SearchResult contact) {
return contact.getOrdernumber();
}
};
// Make the name column sortable.
orderColumn.setSortable(true);
// Create status column.
final TextColumn<SearchResult> statusColumn = new
TextColumn<SearchResult>() {
@Override
public String getValue(final SearchResult contact) {
return contact.getStatus();
}
};
statusColumn.setSortable(true);
// Create View Detail Column
TextColumn<SearchResult> viewDetailColumn = new
TextColumn<SearchResult>() {
@Override
public String getValue(SearchResult contact) {
return contact.getDetail();
}
};
viewDetailColumn.setSortable(true);
// Add the columns.
table.addColumn(orderColumn, "Order Number");
table.addColumn(statusColumn, "Status");
table.addColumn(viewDetailColumn, "View Detail");
this.getJsonData();
// Set the total row count. You might send an RPC request to
determine the
// total row count.
table.setRowCount(contactList.size(), true);
// Set the range to display. In this case, our visible range is
smaller than
// the data set.
table.setVisibleRange(0, contactList.size());
// Create a data provider.
final AsyncDataProvider<SearchResult> dataProvider = new
AsyncDataProvider<SearchResult>() {
@Override
protected void onRangeChanged(final HasData<SearchResult> display)
{
final Range range = display.getVisibleRange();
// Get the ColumnSortInfo from the table.
final ColumnSortList sortList = table.getColumnSortList();
// This timer is here to illustrate the asynchronous nature of
this data
// provider. In practice, you would use an asynchronous RPC call
to
// request data in the specified range.
new Timer() {
@Override
public void run() {
final int start = range.getStart();
final int end = start + range.getLength();
// This sorting code is here so the example works. In practice,
you
// would sort on the server.
Collections.sort(contactList, new Comparator<SearchResult>() {
@Override
public int compare(final SearchResult o1, final SearchResult
o2) {
if (o1 == o2) {
return 0;
}
// Compare the name columns.
int diff = -1;
if (o1 != null) {
diff = (o2 != null) ?
o1.getOrdernumber().compareTo(o2.getOrdernumber()) : 1;
}
return sortList.get(0).isAscending() ? diff : -diff;
}
});
final List<SearchResult> dataInRange =
contactList.subList(start, end);
// Push the data back into the list.
table.setRowData(start, dataInRange);
}
}.schedule(2000);
}
};
// Connect the list to the data provider.
dataProvider.addDataDisplay(table);
// Add a ColumnSortEvent.AsyncHandler to connect sorting to the
// AsyncDataPRrovider.
final AsyncHandler columnSortHandler = new AsyncHandler(table);
table.addColumnSortHandler(columnSortHandler);
// We know that the data is sorted alphabetically by default.
table.getColumnSortList().push(orderColumn);
// Add it to the root panel.
RootPanel.get().add(table);
}
private void getJsonData() {
String url = JSON_URL;
url = URL.encode(url);
// Send request to server and catch any errors.
final RequestBuilder builder = new
RequestBuilder(RequestBuilder.GET, url);
try {
final Request request = builder.sendRequest(null, new
RequestCallback() {
public void onError(final Request request, final Throwable
exception) {
System.out.println("error");
}
public void onResponseReceived(final Request request, final
Response response) {
if (200 == response.getStatusCode()) {
loadData(asArrayOfResultData(response.getText()));
} else {
System.out.println("error");
}
}
});
} catch (final RequestException e) {
System.out.println("error");
}
}
/**
* Update the Price and Change fields all the rows in the stock
table.
*
* @param prices Stock data for all rows.
*/
private void loadData(final JsArray<ResultData> resultData) {
for (int i = 0; i < resultData.length(); i++) {
ResultData res = resultData.get(i);
SearchResult c = new SearchResult(res.getOrdernumber(),
res.getStatus(), res.getDetail());
contactList.add(c);
}
// Display timestamp showing last refresh.
//this.lastUpdatedLabel.setText("Last update : " +
DateTimeFormat.getMediumDateTimeFormat().format(new Date()));
// Clear any errors.
//this.errorMsgLabel.setVisible(false);
}
/**
* Convert the string of JSON into JavaScript object.
*/
private final native JsArray<ResultData> asArrayOfResultData(String
json) /*-{
return eval(json);
}-*/;
}
(3) Server
package com.symantec.mmavis.gwt.server;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class JsonResultData extends HttpServlet {
private static final long serialVersionUID = 1855404725167762932L;
@Override
protected void doGet(final HttpServletRequest req, final
HttpServletResponse resp) throws ServletException, IOException {
// final Random rnd = new Random();
final Result result_1 = new Result("1001", "Valid", "View Detail
1");
final Result result_2 = new Result("1002", "Pending", "View Detail
2");
final Result result_3 = new Result("1003", "Revoked", "View Detail
3");
final Result result_4 = new Result("1004", "Revoked", "View Detail
4");
final Result result_5 = new Result("1005", "Valid", "View Detail
5");
final Result result_6 = new Result("1006", "Pending", "View Detail
6");
final Result result_7 = new Result("1007", "Valid", "View Detail
7");
final Result result_8 = new Result("1008", "Valid", "View Detail
8");
final Result result_9 = new Result("1009", "Revoked", "View Detail
9");
final Result result_10 = new Result("1010", "Valid", "View Detail
10");
final Result[] arrayResult = { result_1, result_2, result_3,
result_4, result_5, result_6, result_7, result_8, result_9,
result_10 };
final PrintWriter out = resp.getWriter();
out.println('[');
final int count = Integer.valueOf(req.getParameter("q"));
for (int i = 0; i < count; i++) {
out.println(" {");
out.print(" \"ordernumber\": \"");
out.print(arrayResult[i].getOrdernumber());
out.println("\",");
out.print(" \"status\": \"");
out.print(arrayResult[i].getStatus());
out.println("\",");
out.print(" \"detail\": \"");
out.print(arrayResult[i].getDetail());
out.println("\"");
out.println("}, ");
}
out.println(']');
out.flush();
}
}
So basically server side we have some json being generated:
http://127.0.0.1:8888/jsonintegrate/search?q=8
When load this page: http://127.0.0.1:8888/JsonIntegrate.html?gwt.codesvr=127.0.0.1:9997
it only loads up the header, the data is not visible..can somebody
please help ??
--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
No comments:
Post a Comment