Velocity - Dropdown-Felder über Macro generieren

Mean

Grünschnabel
Hallo,

nachdem, ich bereits vergebens meine Anfrage in einem anderen Forum gestellt habe - in dem ich mir Velocity-Spezialisten erhofft habe - kehre ich dank ausbleibender Antworten nun wieder ins tutorials.de-Forum zurück (ist zwar mein erster Post, aber ich konnte nichts desto trotz schon viele nützliche Antworten zu diversen Themen hier finden).

Und zwar will ich per Velocity über ein Macro Dropdown-Felder erzeugen. Die Keys und Values für diese Dropdown-Felder sollen aus einer Properties-Datei kommen, die im Java-Code ausgelesen werden und dann in einem Makro in HTML-Tags eingebaut werden.

Was in dem Makro generiert wird ist dann

Code:
Code:
<option value="$value">$key</option>

Wie bekomme ich es denn bitte hin, diese automatisch zu erzeugen? Eine HashMap scheidet aus, da die Werte in der Reihenfolge, wie sie in der Properties aufgeführt sind (in etwa so key_value = Das ist der Text _ text, Value 1 _ value 1).

Ich weiß nun jedoch nicht, wie ich dieses Dropdown nun über eine foreach-Schleife bauen kann und in welcher Form ich diese an Velocity übergebe.

Ein erster Ansatz von mir war:

Code:
Code:
#foreach($blubb in $bla.split(",")
<!-- Hier hätte ich dann innerhalb der foreach-Schleife ja immer die key-value-Paare, also im 1.Durchlauf z.B. Das ist der Text _ text-->
  #foreach($abc in $blubb.split("_")
    <!-- Wenn ich hier jetzt die Ausgabe mache habe ich jedoch für Das ist der Text und text jeweils einen Schleifendurchlauf?! Oder gibt es die Möglichkeit irgendwie per $abc[0] und $abc[1] darauf zuzugreifen?-->
  #end
#end

Vielen Dank und viele Grüße,

Felix
 
Hallo,

könntest du die Werte nicht auch selbst aus dem Properties File auslesen? Wenn du eine LinkedHashMap verwendest bekommst du
die Elemente beim iterieren in der Reihenfolge des Einfügens zurück.

Java:
package de.tutorials;

import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

public class VelocityTemplateExample {
  public static void main(String[] args) throws Exception {
    VelocityContext context = new VelocityContext();

    Map<String, String> map = new LinkedHashMap<String, String>();
    map.put("aaa", "ccc");
    map.put("a", "c");
    map.put("bb", "dd");
    map.put("XXXX", "ZZZZZ");

    context.put("map", map);

    String templateText = 
      "<ul>" + 
        "#foreach( $key in $map.keySet() )" + 
          "<option value=\"$map.get($key)\">$key</option>" + 
        "#end" + 
      "</ul>";

    PrintWriter out = new PrintWriter(System.out);
    Velocity.evaluate(context, out, "in-memory", templateText);
    out.flush();
  }
}

Ausgabe:
Code:
<ul><option value="ccc">aaa</option><option value="c">a</option><option value="dd">bb</option><option value="ZZZZZ">XXXX</option></ul>

Gruß Tom
 
Zurück