Citat:
Na primer, ako u client kodu za dugme napisem kod koji obradjuje dogadjaj: Akcija a = new Akcija(); a.radi(); gde je Akcija klasa iz server dela, kako se ovo prevede u JS?
Ako je akcija iz serverskog dela aplikacije, java kompajler se nece buniti (kad kazem java kompajler mislim na onaj kojim kompajliras dok radis, npr. eclipse kompajler), ali ce se greska javiti kad startujes aplikaciju, jer GWT kompajler nece moci da nadje tu klasu. Radi se o tome da ce gwt kompajler kad naidje na red
Code:
Akcija a = new Akcija();
pokusati da napravi javascript objekat klase Akcija, ali nece uspeti, jer on ne postoji. A on ne postoji, jer je source te klase u serverskom delu projekta, pa ga GWT nije mogao prevesti u javascript.
Ono sto je dobro kod GWT je da u prilicnoj meri utice na programera da primenjuje model-view-controller patern, tj. da klijentski deo koda koristi iskljucivo ya crtanje formi i rad sa html i DOM objektima. Svu logiku treba prebaciti na server. Naravno, postoji mehanizam i za to. GWT obezbedjuje takozvane RPC servise (remote procedure call).
Kada se kreira jedan takav servis, recimo da se zove MyService, u projektu dobijes interface MyService.java
Code:
public interface MyService extends RemoteService ...
Takodje se pojavi i jos jedan interface (kazem da se pojavi, jer ja koristim Cypal studio, pa mi on to generise) koji se zove MyServiceAsync
Code:
public interface MyServiceAsync ...
Ova dva interfejsa se nalaze u klijentskom paketu i sluze samo za definisanje serverske klase koju zelis da pozoves sa klijenta.
Implementacija ovih interfejsa se nalazi u serverskom delu. Na primer ovako izgleda
Code:
public final class MyServiceImpl implements MyService{
...
}
GWT iskoristi ona dva klijentska interfejsa kako bi izgenerisao odgovarajuci javascript kojim poziva ovu "implementirajucu" klasu na serveru. Ime drugog klijentskog interfejsa (MyServiceAsync) ukazuje na to da se radi o asinhronom pozivanju serverskih metoda.
S obzirom da si pitao, citiram :-) : "... kako se ovo prevede u JS?", pretpostavio sam da je pitanje vezano za mehanizam rada, pa sam tako i odgovorio. Ukoliko si mislio na to kako GWT "zna" da prevede Java kod u JS kod, to ne znam i ne zelim da znam. Dovoljno mi je sto radi kako treba :-)