skiera
I'm new here

Manuelle Generierung von Inhalt bzw. Vorlagen

Ich würde gerne Inhalte direkt oder über eine Vorlage in einem BeanShell Skript generieren, damit ich diese z.B. für einen Export weitervenden kann. Ich weiß, dass dich die Generierung von Templatecode über die Invoker-Klasse durchführen kann. Die Klasse benötigt Evualator, für welchen ich die PreviewProduction-Klasse verwende. Wenn ich dies innerhalb meiner IDE mit angefügter fs-server.jar durchführe, funktioniert es ohne Probleme. Versuche ich aber das Ganze innerhalb eines BeanShell Skriptes laufen zu lassen, so kommt es zu folgenden Fehler:

ERROR 09.12.2010 15:21:34.837 (de.espirit.firstspirit.client.AWTDispatchingEventQueue): Error during dispatching of java.awt.event.MouseEvent[MOUSE_RELEASED,(36,43),absolute(568,401),button=1,modifiers=Button1,clickCount=1] on panel1

FSVersion=4.2.219.38784#2114;JDK=1.6.0_18 32bit Sun Microsystems Inc.;OS=Windows 7 6.1 x86;Date=09.12.2010 15:21:34

java.lang.IllegalAccessError: class de.espirit.firstspirit.generate.PreviewProduction$1 cannot access its superclass de.espirit.firstspirit.generate.PreviewUrlCreator

    at java.lang.ClassLoader.defineClass1(Native Method)

    at java.lang.ClassLoader.defineClassCond(Unknown Source)

    at java.lang.ClassLoader.defineClass(Unknown Source)

    at java.security.SecureClassLoader.defineClass(Unknown Source)

    at de.espirit.firstspirit.client.io.RemoteClassLoader.findClass(RemoteClassLoader.java:68)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    at java.lang.ClassLoader.loadClass(Unknown Source)

    at java.lang.Class.getDeclaredConstructors0(Native Method)

    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)

    at java.lang.Class.getConstructors(Unknown Source)

    ...

Ich vermute, dass es hier am ClassLoader liegt. Gibt es hier eine Möglichkeit das Problem zu umgehen oder gibt es eine andere Möglichkeit zum manuellen generieren des Inhalts bzw. einer Vorlage innerhalb eines BeanShell Skriptes?

Hier noch mein Test BeanShell Skript:

//!BeanShell

import java.io.StringWriter;

import de.espirit.firstspirit.parser.eval.Invoker;

import de.espirit.firstspirit.generate.PreviewProduction;

import de.espirit.firstspirit.access.UserService;

UserService userService = context.getUserService();

String text = "<DOM>Beispieltext</DOM>";

boolean release = true; // Vorschau oder Live?

// Evaluator erzeugen. Diesen auch nutzen, wenn das Liveergebnis generiert werden soll

PreviewProduction evaluator = new PreviewProduction(null, userService, release, userService.getProject()

.getMasterLanguage(), userService.getProject().getTemplateSets().get(0), null);

evaluator.setOut(new StringWriter());

// Der Invoker ruft den entsprechenden Renderer für das Objekt auf

Invoker.evalMethod("print", text, Collections.emptyList(), evaluator );

print(eval.getOut().toString());

6 Replies
Peter_Jodeleit
Crownpeak employee

Zum einen gibt es dafür keine API. Ausserdem sind die meisten Klassen für die Generierung im fs-client.jar nicht enthalten.

Ich habe mal ein kurzes Bespiel gemacht, wie man Template-Code im Client ausführen kann, weiß aber nicht, ob das für ihren Anwendungsfall hilft - Seiten generieren kann man darüber nicht...

community_templatecode.jpg

Peter

Erstmal Vielen Dank für das Beispiel! Leider löst es nicht mein Problem, da Elemente wie DOM Editoren nicht evaluiert, sondern einfach nur in Strings (sieht nach einem einfachen toString() Aufruf aus) umgewandelt werden.

0 Kudos

Das liegt daran, das die meisten Klassen für die Generierung im fs-client.jar nicht enthalten sind.

Peter
0 Kudos

Ich wollte nur mein Problem verdeutlichen, dass die Dateien nur auf dem Server liegen ist mir bewusst 🙂

Gibt es denn eine Möglichkeit die URL einer Seite in der Vorschau innerhalb eines Scriptes aufzurufen? Wobei weniger die URL das Problem wäre, sonder eher die Session ID.

0 Kudos

Die Vorschau-URL bekommen Sie über Methoden aus dem Interface Previewable, ein Ticket über Connection.createTicket().

Peter
0 Kudos

Die URL Generierung funktioniert und löst somit mein Problem. Vielen Dank!

0 Kudos