Archiwum
Ajax w GWT – pogodynka
Czas na pierwszy, konkretny wpis. Jako że chciałem mniej więcej zobaczyć GWT, wygrzebałem link z moich zakładek na delicious: Ajax for Java developers: Exploring the Google Web Toolkit
Wpis z 2006, kilka metod przestarzałych, no i oczywiście aplikacja nie działa z nową biblioteką HTTP Components.
Informacja: W tym i kolejnych artykułach nie będę się rozpisywał o technologii, szkoda czasu na bawienie się w tłumacza i przepisywanie tego co już jest napisane, więc w razie potrzeby będę odsyłał do innych artykułów.
Potrzebujemy:
- jakieś IDE [ja używam NetBeans w wersji 6.7]
- Apache HTTP Components – ściągamy zarówno paczkę HttpClient jak i HttpCore [binary] – ja użyłem wersji 4
- plugin GWT do NetBeans’a gwt4nb
- biblioteka Apache Commons Logging
Krótki tutorial na temat używania Netbeans i GWT można znaleźć tutaj
Tworzymy nowy projekt „Java WebApplication” na liście frameworków wybieramy „Google Web Toolkit”. Do bibliotek dodajemy paczki httpclient-4.0.jar , httpcore-4.0.1.jar oraz commons-logging-1.1.1.jar. Po przeczytaniu artykułu na którym bazuję idziemy dalej.
Na początek zmiany w kodzie mające na celu usunięcie przestarzałych metod [w klasie Weather].
Najważniejsze zmiany to kod odpowiedzialny za przechwytywanie zdarzeń.
Czyli naciśnięcie klawisza ENTER zmieniamy z
txBox.addKeyboardListener(new KeyboardListenerAdapter(){ public void onKeyPress(Widget sender, char keyCode, int modifiers) { if ((keyCode == 13) && (modifiers == 0)) { validateAndSubmit(); } } });
na
txBox.addKeyPressHandler(new KeyPressHandler() { public void onKeyPress(KeyPressEvent event) { if ((event.getCharCode() == KeyCodes.KEY_ENTER) && (event.isAnyModifierKeyDown() == false)) { validateAndSubmit(); } } });
wykrycie kliku lewego przycisku myszy z
Button btn = new Button("Submit", new ClickListener() { public void onClick(Widget sender) { validateAndSubmit(); } });
na poniższy kod
Button btn = new Button("Submit", new ClickHandler() { public void onClick(ClickEvent event) { validateAndSubmit(); } });
w kilku miejscach znajdziemy też
ucRadio.setChecked(true) ucRadio.isChecked();
i zmieniamy odpowiednio na
ucRadio.setValue(true) ucRadio.getValue();
Reszta zmian, to dostosowanie aplikacji do nowej wersji bibliotek Apache HTTP Components [v.4].
W klasie YahooWeatherServiceImpl zmieniamy ciało funkcji getWeatherRssDocument() z:
String url = getRequestUrl(zip, isCelsius); HttpClient client = new HttpClient(); GetMethod get = new GetMethod(url); try { int resultCode = client.executeMethod(get); log.debug("HTTP response: "+resultCode); if (resultCode == 200) { InputStream in = get.getResponseBodyAsStream(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); return builder.parse(in); } else { throw new IOException("HTTP Communication problem, response code: "+resultCode); } } finally { get.releaseConnection(); }
na następujący kod:
String url = getRequestUrl(zip, isCelsius); HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(url); try { HttpResponse response = (HttpResponse) client.execute(get); int resultCode = response.getStatusLine().getStatusCode(); log.debug("HTTP response: " + resultCode); HttpEntity entity = response.getEntity(); if (resultCode == HttpStatus.SC_OK) { InputStream in = entity.getContent(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); return builder.parse(in); } else { throw new IOException("HTTP Communication problem, response code: " + resultCode); } } finally { // Process the data from the input stream. }
To wszystko. Aplikacja działa 🙂 pokazuje pogodę [przykładowy kod pocztowy 90210].
Źródło aplikacji dostępne jest tutaj
Jeśli ktoś ma jakieś pytania co i jak, lub sugestie odnośnie lepszych rozwiązań zapraszam do komentowania 🙂
Najnowsze komentarze