{"id":512,"date":"2010-03-30T12:10:00","date_gmt":"2010-03-30T10:10:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/archives\/512"},"modified":"2010-03-30T19:42:58","modified_gmt":"2010-03-30T17:42:58","slug":"2-gwt-bibliotheken-fr-rest-und-mvp-anwendungen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2010\/03\/2-gwt-bibliotheken-fr-rest-und-mvp-anwendungen\/","title":{"rendered":"2 GWT Bibliotheken f&uuml;r REST- und MVP-Anwendungen"},"content":{"rendered":"<p>1. <a href=\"http:\/\/code.google.com\/p\/restful-gwt\/\">http:\/\/code.google.com\/p\/restful-gwt\/<\/a><\/p>\n<p>Die History korrekt zu Implementieren ist das O und A einer GWT-Anwendung. Hier greift <a href=\"http:\/\/code.google.com\/p\/restful-gwt\/\">http:\/\/code.google.com\/p\/restful-gwt\/<\/a> unter die Arme, in dem es wie bei REST Pfade einzelne GWT-Seiten mappt. Das Projekt steht am Anfang, die Idee ist aber nett f\u00fcr kleinere GWT-Anwendungen.<!--more--><\/p>\n<blockquote>\n<h5><a name=\"Simple_Example\">Simple Example<\/a><\/h5>\n<pre>@GET@Produces(\"text\/html\")public String textHtmlDemo() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return \"welcome &lt;b&gt;home&lt;b&gt; !\";}<\/pre>\n<p>A new gwt Label with : &#8222;welcome <strong>home<\/strong> !&#8220; will be appended to the RootPanel.<\/p>\n<h5><a name=\"Example_2\">Example 2<\/a><\/h5>\n<pre>@GET@Path(\"hello\/{name}\")public void helloWithIntegerParam(@PathParam(\"name\") Integer myName) {\u00a0\u00a0 Window.alert(\"Hello \"+(myName+1));}<\/pre>\n<p><a name=\"Example_2\">If you try to access <\/a><a href=\"http:\/\/...\/MyPage.html#hello\/1\">http:\/\/&#8230;\/MyPage.html#hello\/1<\/a> the helloWithIntegerParam will be invoked <strong>on client side<\/strong> with the parameter &#8222;1&#8220;. Since the return type is void, nothing will be added automatically to the Rootpanel. You will just see a popup displaying &#8222;Hello 2&#8220;.<\/p>\n<h5><a name=\"Example_3\">Example 3<\/a><\/h5>\n<pre>@GETpublic Widget demo3() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return new Button(\"Click me\");}<\/pre>\n<p>Yes, returning widgets works too !<\/p>\n<h5><a name=\"Example_4\">Example 4<\/a><\/h5>\n<pre>@Path(\"search\/{name}\")public class Test {\r\n\r\n@PathParam(\"name\")String name;\r\n\r\n@GETpublic void search() {\u00a0\u00a0 myTextBox.setValue(name);}}<\/pre>\n<p>Field initialisation is working the same way.<\/p>\n<h5><a name=\"Example_5\">Example 5<\/a><\/h5>\n<pre>@Path(\"search\/{name}\")public class Test {\r\n\r\n@UiField@PathParam(\"name\")TextBox tbName;\r\n\r\n@GETpublic void search() {\u00a0\u00a0 \/\/ nothing here}}<\/pre>\n<p>In this special case, when a field extends &#8222;HasValue&#8220; class, the field have to be initialized by yourself, the framework will call &#8222;setValue&#8220; with the<\/p><\/blockquote>\n<p>2. <a title=\"http:\/\/code.google.com\/p\/mvp4g\/\" href=\"http:\/\/code.google.com\/p\/mvp4g\/\">http:\/\/code.google.com\/p\/mvp4g\/<\/a><\/p>\n<p>Noch eine Nummer gr\u00f6\u00dfer als der bescheidene erste REST-Ansatz ist <a title=\"http:\/\/code.google.com\/p\/mvp4g\/\" href=\"http:\/\/code.google.com\/p\/mvp4g\/\">http:\/\/code.google.com\/p\/mvp4g\/<\/a> aufgestellt. Es implementiert in komplettes MVP-Framework mit Event-Bus, DI, Modulen, Code-Spitting und allen Schnick und Schnack. Die Dokumentation ist mit UML-Diagrammen schon fast unwirklich. Die Einarbeitung dauert, zahlt sich jedoch aus. Eine Umstellung existierender GWT-Anwendungen ist jedoch aufw\u00e4ndig, da mvp4g gr\u00f6\u00dfere \u00c4nderungen nach sich zieht.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. http:\/\/code.google.com\/p\/restful-gwt\/ Die History korrekt zu Implementieren ist das O und A einer GWT-Anwendung. Hier greift http:\/\/code.google.com\/p\/restful-gwt\/ unter die Arme, in dem es wie bei REST Pfade einzelne GWT-Seiten mappt. Das Projekt steht am Anfang, die Idee ist aber nett f\u00fcr kleinere GWT-Anwendungen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[16,4,15],"tags":[],"class_list":["post-512","post","type-post","status-publish","format-standard","hentry","category-gwt","category-open-source","category-web-frameworks"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=512"}],"version-history":[{"count":2,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/512\/revisions"}],"predecessor-version":[{"id":517,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/512\/revisions\/517"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}