Archive

Archive for the ‘GWT’ Category

Ajax w GWT – pogodynka

24 października 2009 4 komentarze

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:

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 🙂