Apache Velocity - Klassen ansprechen - wie?

riseX

Mitglied
Hallo,

ich habe nun vorher den eigentlichen JSP Code aus meinem Servlet rauszuhalten und ein wenig mehr auf MVC zu achten. Nun benutzte ich Velocity von Apache. Nun habe ich gelesen, dass ich auch auf Methoden in Beans zugreifen kann ... nun bin ich mir nicht sicher wie das gehen soll.

Der Zugriff innerhalb des Templates scheint klar zu sein ... das läuft genauso ab wie der Zugriff auf normale Variablen.

Wie ordne ich z. B. nun im Template der Variable $zeuch die Klasse CZeuch zu? ...

Danke schonmal
Gruß
riseX
 
mmh weiss keiner was ich meine? ich versuche einfach auf ein Array aus einer Klasse zuzugreifen in dem Template. Weiss keiner wie ich das machen kann?
 
Das Problem ist, dass ich Velocity nicht kenne und den anderen scheint es ähnlich zu gehen (oder sie haben den Thread hier noch nicht gesehen). So auf den ersten Blick scheint das ziemlich umfangreich zu sein und ich hab die Sache mit den Templates auch nicht gefunden (aber auch nicht lange gesucht).

Ich kenn Templates nur so, dass man sie für Anfragen benutzt und als Ergebnis ein Objekt zurück erhält, das vom Datentyp her dem Template entspricht (z.B. alle public Variablen gleich initialisiert sind), aber halt nicht mehr das Template ist, sondern ein korrekt initialsiertes Objekt, z.B. dein CZeuch, das irgendwann vorher mal in dem Container (oder worin auch immer man mit dem Template gesucht hat) abgelegt worden ist. So funktioniert's zum Beispiel bei JavaSpaces soweit ich mich erinner (ist lange her...)
 
OK danke ... es sieht nun so aus, dass ich dem VelocityContext eine HashMap mit den entsprechend benötigten Werten mitgebe. Da Schleifen in VTL kein Problem sind, funktioniert das nun auch so.

Trotzdem danke
Gruß vom riseX
 
Hallo,

du musst der Velocity Template Engine einen Kontext mitgeben auf dem die Engine arbeiten kann.

Beispiel:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.PrintWriter;

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

/**
 * @author Thomas.Darimont
 * 
 */
public class VelocityExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Velocity.init();
        VelocityContext context = new VelocityContext();
        context.put("bubu", new Bubu("baba"));
        PrintWriter printWriter = new PrintWriter(System.out);
        Velocity.getTemplate("config/bubu.vm").merge(context, printWriter);
        printWriter.flush();
    }
}

Java:
/**
 * 
 */
package de.tutorials;

public class Bubu{
    private String stringProperty;
    
    public Bubu(String stringProperty) {
        super();
        this.stringProperty = stringProperty;
    }

    public String getStringProperty() {
        return stringProperty;
    }

    public void setStringProperty(String stringProperty) {
        this.stringProperty = stringProperty;
    }
}

bubu.vm:
Code:
-> $bubu.StringProperty

Ausgabe:
Code:
03.07.2007 13:56:49 org.apache.velocity.runtime.log.JdkLogChute log
INFO: FileResourceLoader : adding path '.'
-> baba

Wie man im Template mit Kontextobjekten umgeht findet man hier:
http://velocity.apache.org/engine/devel/user-guide.html

Gruß Tom
 
Du packst also einfach ein Objekt der Klasse in die HashMap ... klingt logisch ... mmhh ... ziemlich simpel eigentlich.

Top danke Tom. :-)

ich werde das mal antesten.

Gruß
vom riseX
 
Nochmal ich,

ich hab direkt nen neues Problem ... wenn ich zum Beispiel eine Schleife in einem Template durchgehen möchte .. klar ... wenns ne Collection ist oder ne HashMap dann ist das kein Problem ... aber wenn ich nun einfach ne Variable hab mit dem Wert 5 ... und ich möchte eine Schleife 5 mal durchlaufen ... eine while-Schleife scheint es nicht zu geben.

Danke und Gruß
vom riseX
 
Zurück