{"id":321,"date":"2009-05-19T19:30:00","date_gmt":"2009-05-19T19:30:00","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=321"},"modified":"2009-05-19T19:30:00","modified_gmt":"2009-05-19T19:30:00","slug":"ext-gwt-beispiel-einer-editierbaren-tabelle","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2009\/05\/ext-gwt-beispiel-einer-editierbaren-tabelle\/","title":{"rendered":"Ext GWT Beispiel einer editierbaren Tabelle"},"content":{"rendered":"<p>Die Daten einer Tabelle liegen zeilenweise in einem <strong>ListStore<\/strong>. Die <strong>ListStore<\/strong> wird mit dem generischen Typ parametrisiert, den das Modell speichern soll. Es k\u00f6nnen entweder eigene Beans sein, oder wir nutzen <strong>BaseModel<\/strong>, ein generischer Speicher von Ext GWT, der wie eine Map (oder Dyna-Bean) arbeitet. <\/p>\n<p>ListStore&lt;BaseModel&gt; store = new ListStore&lt;BaseModel&gt;(); <\/p>\n<p>Geben wir der Tabelle zwei Zeilen, also zwei <strong>BaseModel<\/strong>-Objekte. <\/p>\n<p>BaseModel c = new BaseModel();<br \/>c.set( &#8222;url&#8220;, &#8222;<a href=\"http:\/\/www.tutego.com\/index.html\">http:\/\/www.tutego.com\/index.html<\/a> &#8222;);<br \/>c.set( &#8222;days&#8220;, &#8222;34&#8220;);<br \/>c.set( &#8222;price&#8220;, &#8222;233&#8220;);<br \/>store.add( c ); <\/p>\n<p>c = new BaseModel();<br \/>c.set( &#8222;url&#8220;, &#8222;<a href=\"http:\/\/www.heise.de\/newsticker\/\">http:\/\/www.heise.de\/newsticker\/<\/a> &#8222;);<br \/>c.set( &#8222;days&#8220;, &#8222;3&#8220;);<br \/>c.set( &#8222;price&#8220;, &#8222;2553&#8220;);<br \/>store.add( c );<\/p>\n<p>Die <strong>BaseModel<\/strong>-Objekte beschreiben also drei Spalten.<\/p>\n<p>Nun sind die Daten im Speicher und die Informationen f\u00fcr die Spalten m\u00fcssen aufgebaut werden. Jede Spalte wird durch ein <strong>ColumnConfig<\/strong>-Objekt beschrieben. Die <strong>ColumnConfig<\/strong>-Objekte werden dann in einer Liste gespeichert und zur Initialisierung eines <strong>ColumnModel<\/strong>s genutzt. Ein <strong>ColumnConfig<\/strong>-Objekt bekommt Informationen wie die Breite, aber auch Editoren zugewiesen.<\/p>\n<p>List&lt;ColumnConfig&gt; configs = new ArrayList&lt;ColumnConfig&gt;(); <\/p>\n<p>TextField&lt;String&gt; column1TextEditor = new TextField&lt;String&gt;();<br \/>column1TextEditor.setAllowBlank( false ); <br \/>ColumnConfig column1 = new ColumnConfig( &#8222;url&#8220;, &#8222;URL&#8220;, 400 );<br \/>column1.setEditor( new CellEditor( column1TextEditor ) );<br \/>configs.add( column1 );&nbsp; <\/p>\n<p>ColumnConfig column2 = new ColumnConfig( &#8222;days&#8220;, &#8222;Tag(e)&#8220;, 80 );<br \/>column2.setEditor( new CellEditor( new TextField&lt;String&gt;() ) );<br \/>configs.add( column2 );  <\/p>\n<p>ColumnConfig column3 = new ColumnConfig( &#8222;price&#8220;, &#8222;Gesamtpreis&#8220;, 80 );<br \/>column3.setEditor( new CellEditor( new TextField&lt;String&gt;() ) );<br \/>configs.add( column3 );  <\/p>\n<p>ColumnModel cm = new ColumnModel( configs );  <\/p>\n<p>Der parametrisierte Konstruktor von <strong>ColumnConfig<\/strong> erwartet einen Schl\u00fcsselnamen, den Titel f\u00fcr den Spaltenkopf und die Breite. <\/p>\n<p>Jetzt kommt es zur Hautkomponente, dem <strong>EditorGrid<\/strong>. Er ben\u00f6tigt drei Informationen: Die Tabellendaten (der ListStore store), die Spaltendaten (ColumnModel cm) und als generische Angabe der Datentyp der Modellelemente. <\/p>\n<p>EditorGrid&lt;BaseModel&gt; grid = new EditorGrid&lt;BaseModel&gt;( store, cm ); <\/p>\n<p>Die Komponenten wird nun wie jede andere auf den Container gesetzt. <\/p>\n<p>panel.add( grid ); <\/p>\n<p>Zugriff auf die Daten liefert store.getModels(). M\u00f6chte man durch alle Zeilen laufen, erledigt dies einfach das erweiterte for: <\/p>\n<p>for ( BaseModel model :store.getModels() )<br \/>&nbsp; \u2026<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Daten einer Tabelle liegen zeilenweise in einem ListStore. Die ListStore wird mit dem generischen Typ parametrisiert, den das Modell speichern soll. Es k\u00f6nnen entweder eigene Beans sein, oder wir nutzen BaseModel, ein generischer Speicher von Ext GWT, der wie eine Map (oder Dyna-Bean) arbeitet. ListStore&lt;BaseModel&gt; store = new ListStore&lt;BaseModel&gt;(); Geben wir der Tabelle zwei [&hellip;]<\/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,15],"tags":[],"class_list":["post-321","post","type-post","status-publish","format-standard","hentry","category-gwt","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\/321","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=321"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/321\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}