2017-12-07 6 views
1

Ich habe eine Verzeichnisstruktur wie folgt aus:Java String Verwenden von Datei von außerhalb Verzeichnis

Templates/ 
├── Foo/ 
│ ├── Foo.st 
├── Signature.st 

Hier ist, was die Foo.st wie folgt aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
</head> 
<body> 
    <div id="body"> 
     <p> Some Text </p> 
    </div> 
    $Signature()$ 
</body> 
</html> 

Hier mein Java-Code ist mit StringTemplate:

STRawGroupDir dir = new STRawGroupDir("Templates", '$', '$'); 
ST st = dir.getInstanceOf("Foo/Foo"); 
System.out.println(st.render()); 

Aber der Ausgang ist:

<?xml version="1.0" encoding="UTF-8"?> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
</head> 
<body> 
    <div id="body"> 
     <p> Some Text </p> 
    </div> 
</body> 
</html> 

Wie bekomme ich die Foo Vorlage, um die Signaturvorlage korrekt referenzieren zu können?

Wenn ich Signature.st innerhalb des Foo Verzeichnis setzen dann der obige Code funktioniert gut, aber ich kann das nicht tun, wie ich viele Vorlagen haben werden, die die Signature Vorlage verweisen wird.

Antwort

2

Versuchen:

... 
$/Signature()$ 
... 

Template Anrufe in Bezug auf die Berufung Vorlage aufgelöst werden. Wenn Sie einen Vorlagenanruf mit dem Präfix / starten, wird die Vorlage absolut aufgerufen - was Sie erwarten.

0

Ich fand einen wirklich einfachen Weg, dies zu tun. Ich habe jetzt die folgende Verzeichnisstruktur:

Templates/ 
├── Foo/ 
│ ├── Foo.st 
├── Main.st 
├── Signature.st 

Hier ist mein Main.st

$ templates : { template | 
$(template)()$ 
}$ 

$Signature()$ 

Und hier ist mein Java-Code:

STRawGroupDir dir = new STRawGroupDir("Templates", '$', '$'); 
ST st = dir.getInstanceOf("Main"); 
st.add("templates", Arrays.asList("/Foo/Foo.st")); 
st.render(); 

Jetzt kann ich in einer beliebigen Anzahl von Vorlagen passieren und das funktioniert perfekt.

Verwandte Themen