# Vertzeichnis-Strukturen von GWT-Anwendungen



## Novanic (2. Mrz 2008)

Hallo Leute,

ich möchte mich ein bisschen mit GWT beschäftigen und frage mich wie es eigentlich mit den Verzeichnisstrukturen vorgesehen ist. Immer wenn die Verzeichnisstrukturen erwähnt werden, ist meistens nur von einer kleinen Anwendung die Rede, die bloß aus einer Seite besteht. Aber wie sieht es bei größeren Anwendungen aus, was ist da die beste Strategie?

Soll für jede Seite ein eigenes Module erstellt werden (also für jede Seite ein client, public und server Package) oder ein Module in dem sich alle Seiten befinden? Wie ist da der Standardweg?
Im ersten Fall hätte man ein Problem mit der Wiederverwendbarkeit und beim zweiten Fall bin ich mir nicht sicher ob das so vorgesehen wurde.

Und wie läuft das eigentlich mit Links zwischen GWT-Seiten? Im Netz findet man größtenteils nur Demo-Seiten (einseitig) und auch in meinem Buch steht dazu nichts drin. Hat dafür jemand ein Beispiel parat oder weiß wo ich ein Beispiel dazu finde?

Vielen Dank schon einmal im Voraus!

Gruß Nova


----------



## byte (2. Mrz 2008)

Ich würde für eine Anwendung ein GWT-Modul machen. Sonst ist die Entwicklung unnötig kompliziert. Am meisten Sinn macht es, für eine GWT-Anwendung direkt drei Projects anzulegen (Client, RPC und Server). Das hat den Vorteil, dass man auf dem Server mit Java 5 oder 6 kompilieren kann und somit alles verwenden kann, was man will (z.B. Hibernate Annotations). Ins RPC-Projekt kommt dann alles, was zw. Client und Server ausgetauscht wird (Service-Interfaces und alles was IsSerializable implementiert, also die Java-Beans). Ins Client-Projekt kommen die eigentlichen GWT-Klassen, also der View-Code. Das Deployment ist zwar etwas komplizierter, aber man hat eine klare Trennung. Wie Du dabei die Packages sinnvollerweise einteilst und den Classpath anpasst, ist hier ganz gut beschrieben:

http://www.javaworld.com/javaworld/jw-04-2007/jw-04-gwt.html


PS: Der Post passt besser ins neue AJAX-Forum.


----------



## Novanic (2. Mrz 2008)

Danke für die Antwort, du kennst dich ja echt mit alles aus byto.  Das ist auch ein sehr guter Link.
Aber wieso unter AJAX posten? Das ist doch ein Java-Framework das mich versucht von AJAX fernzuhalten. ;-)

Wie macht man das bei GWT eigentlich bei größeren Anwendungen? Implementiert man nur einen EntryPoint und tauscht dann immer die Panels aus um eine neue Seite zu erstellen oder kann man auch für jede Seite einen EntryPoint implementieren und diese dann verknüpfen?

Bisher habe ich das Layout für meine GWT-Seite mit HTML-Tables bestimmt, weil ich das Layouten mit Panels und Layouts (in gwt-ext) schrecklich finde. Wenn ich die Seiten mittels Panels in einem einzigen EntryPoint zusammensetze, könnte ich diese Möglichkeit leider nicht mehr nutzen...

Gruß Nova


----------



## byte (3. Mrz 2008)

Also, als GWT-Experte würde ich mich auch nicht bezeichnen. Habe nur ein paar kleinere Anwendungen damit umgesetzt. AFAIK ist es am sinnvollsten, einen EntryPoint pro Anwendung zu definieren. Du hast dann zwar nur einen richtigen Link im Browser zu Deiner Anwendung, es gibt aber eine Möglichkeit, interne Links zu definieren, so dass diese auch über die URL direkt erreichbar sind. Schau Dir dazu die History-Klasse an. Vom Prinzip läuft das so, dass Du so genannte History Tokens anlegst für Deine internen Seiten. Diese sind dann über die URL per Anchor erreichbar (http://deine.domain/DeineAnwendung.html#IchBinEinToken).

Was das Layouten angeht: Kann ich nicht ganz nachvollziehen, was Du an den Panels nicht magst. Ich finde sie genial, weil Du Dich nicht mit Divs und float rumschlagen musst. Und wenn Du mal was in Tabellenform anordnen willst, dann nimmst Du einfach ein CellPanel, Grid oder FlexTable. Das sind im Grunde nichts anderes als HTML-Table jedoch dynamisch veränderbar. IMO ist das Layouten grade eine große Stärke von GWT, weil man sich nicht mit den CSS-spezifischen Browserunterschieden herumschlagen muss.


----------



## Novanic (3. Mrz 2008)

Naja, wenn man das Layouten mit HTML macht, verfolgt man weiterhin den Ansatz von JSP: Designer können das Design mit HTML und CSS übernehmen, ohne Java können zu müssen. Außerdem ist das Layouten mit einem HTML-Table extrem einfach und sollte auch in jedem Browser gleich dargestellt werden, wenn man prozentuale Werte angibt.
Für genau dieses "Problem" habe ich jetzt auch eine GWT-Library gefunden: http://code.google.com/p/htmltemplatewidget/. Damit kann man HTML-Seiten zum Layouten verwenden, ich werde mir deine Vorschläge aber nochmal ansehen, vielleicht kann ich mich ja doch mit den Panels anfreunden. 

Danke.

Gruß Nova


----------



## byte (3. Mrz 2008)

Also layouten tut man normale Webseiten eigtl. schon lange nicht mehr mit HTML-Tables sondern per CSS. Dass es dabei mehr oder weniger große Browserunterschiede gibt, ist eigentlich allseits bekannt. Das wirst Du auch noch feststellen, wenn Du ein bißchen aufwendigere Layouts gebaut hast.
Das Layouten mit GWT funktioniert hingegen ähnlich wie bei Swing oder SWT, wobei es keine komplizierten Layoutmanager wie GridBagLayout gibt. Ich sag einfach mal, wer Swing kann, der hat das Layouten mit GWT nach nem Tag drauf.
Verstehe echt nicht, was Dich daran stört. Bring mal ein Beispiel. Trennung von Webdesign und Programmcode kannst Du bei AJAX imo sowieso vergessen, weil die Grenzen dort verschwimmen. Im übrigen wird das selbst bei JSP und Co. nicht richtig praktiziert. Wie willst Du eine JSP bauen ohne die Controller zu kennen + die Daten, die diese an die View liefern?


----------



## Novanic (3. Mrz 2008)

Layouten mit CSS ist ja auch ganz furchtbar. Die meisten Web-Projekte die ich kenne nutzen auch HTML-Tables zum Layouten, da hat man auch keine Probleme mit. Ich finde es gibt nur ein brauchbares Swing-Layout und das ist das TableLayout und das funktioniert im Prinzip auch wie ein HTML-Table. ;-)

Grid und FlexTable scheinen ganz gut zu sein, ich werde mir jetzt wohl nochmal eine Klasse von Grid ableiten, um dass ganze noch etwas zu vereinfachen.

Danke für die Hilfe.

Gruß Nova


----------



## byte (4. Mrz 2008)

Layouten mit HTML-Table ist ganz furchtbar, weil man das Verhalten des Tables nicht richtig vorraussehen kann, wenn sich der Content innerhalb der Zellen von der Größe verändert. Und auch dort gibts Browserunterschiede. Ich erinnere mich noch gut, dass ein Browser (ich glaube es war der gute IE) Probleme damit hatte, wenn man prozentuale und fixe Breiten in den Tables kombiniert usw.

Ich kenne eigentlich keine Seite mehr, die heute noch das Layout auf HTML-Tables aufbaut. Find die Vorstellung auch echt gruselig, wenn ich an damals denke.


----------

