Mercurial > dive4elements > river
changeset 7401:bbf758e594bb
Datacage reference doc: Explain dc:container-context and dc:properties.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Mon, 21 Oct 2013 12:22:40 +0200 |
parents | dd87e0a5f83c |
children | 93ae1aa8ade9 |
files | artifacts/doc/datacage_ref_de.rst |
diffstat | 1 files changed, 95 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/artifacts/doc/datacage_ref_de.rst Mon Oct 21 11:43:50 2013 +0200 +++ b/artifacts/doc/datacage_ref_de.rst Mon Oct 21 12:22:40 2013 +0200 @@ -142,9 +142,102 @@ ``dc:container-context`` Tabellarische Daten aus der Programm-Umgebung ...................................................................... -**TODO** +.. code:: xml -``dc:properties`` **TODO** + <dc:container-context container="Container"> + ... + </dc:container-context> + +Dies spannt einen Kontext auf einem Container namens Container auf, +einer listen-ähnlichen Struktur, die als externe Datenquellen in +Form eines Java-Objekts an den Datenkorb übergeben werden kann. +Dies müssen Klassen sein, die das Interface ``java.util.Collection`` +implementieren. Mit diesem Konstrukt ist es möglich, tabellarische +Ergebnisse von außen in die Auswertung des Datenkorbs zu integrieren. +Der Container muss hierfür über die Variable ``Container`` zur Verfügung +gestellt werden. Die Spalten des Tabelle werden über ``dc:properties`` +definiert. Der Datensatz selbst kann wie gewohnt mittels ``dc:for-each`` +realisiert werden. + +``dc:properties`` Spaltendefinitionen für externe Daten aus der Programm-Umgebung +................................................................................. + +.. code:: xml + + <dc:container-context container="Container"> + <dc:properties> + <dc:property name="name" alias="alias"/> + </dc:properties> + </dc:container-context> + +Muss innerhalb eines ``dc:container-context`` angegeben werden und enthält eine +Liste von Attributen der Java-Objekte, die in den Datenkorb eingeblendet werden sollen. +Die Auflösung der Namen auf der Java-Seite funktioniert nach Konvention von Java-Beans, +sprich aus ``name`` wird ``getName``. ``alias`` ist optional und weisst explizit einen +Spaltennamen aus. Dies entspricht im Wesentlichen einen 'AS' bei einem SQL-Statement. + +Ein vollständigeres Beispiel könnte in etwa so aussehen. +Die Java-Seite: + +.. code:: java + + public class Car { + + private String marke; + private String name; + + public Car(String marke, String name) { + this.marke = marke; + this.name = name; + } + + public String getMarke() { + return marke; + } + + public String getName() { + return name; + } + } + + // Liste befuellen. + + java.util.Container<Car> container = new java.util.ArrayList<Car>(); + + container.add(new Car("Volvo", "V80")); + container.add(new Car("Ferrari", "Testarossa")); + + // Dem Datenkorb uebergeben. + + parameters.put("CARS", cars); + +Das Datenkorb-Schnipsel + +.. code:: xml + + <dc:container-context container="cars"> + <dc:properties> + <dc:property name="marke" alias="brand" /> + <dc:property name="name" alias="type" /> + </dc:properties> + + <cars> + <dc:for-each> + <car type="$type" brand="$brand" /> + </dc:for-each> + </cars> + </dc:container-context> + +liefert dann folgende Ausgabe: + +.. code:: xml + + <cars> + <car type="V80" brand="Volvo" /> + <car type="Testarossa" brand="Ferrari" /> + </cars> + + ``dc:virtual-column`` Virtuelle Spalten definieren ..................................................