2012-03-31 8 views
0

Ich bin eine Geschwindigkeit Vorlagendatei (.vm), in dem das Schreiben bekomme ich diese Klasse mit Reflexion:Aufruf Java-Methoden mit Array-Parameter von Geschwindigkeit

#set ($assetEntryQuery = $portal.getClass().forName("com.liferay.portlet.asset.service.persistence.AssetEntryQuery").getConstructor().newInstance()) 

dann erstelle ich ein Array und rufen Sie diese Funktion:

#set ($arr = ['$category.getCategoryId()']) 
$assetEntryQuery.setStart(0) 
$assetEntryQuery.setEnd(6) 
$assetEntryQuery.setAllCategoryIds($arr) 

Leider nimmt die setAllCategoryIds ein Array long [], und kein Geschwindigkeits Array. Was ich auf der Website erhalten, ist „$ assetEntryQuery.setAllCategoryIds ($ arr)“ gedruckt wird. Hat jemand von euch eine Idee, wie es funktioniert?

Antwort

0

Sie sollten den Apostroph entfernen um [ '$ category.getCategoryId()'], ​​dieses zu haben: [$ category.getCategoryId()]

EDIT Als Hack und Abhilfe, das das Problem gelöst:

Da Geschwindigkeit unterstützt Varargs in Methoden (siehe die Kommentare in dieser Antwort).

+0

Nein, es funktioniert nicht :( –

+0

Zwei Dinge sollten wir dann überprüfen: liefert $ category.getCategoryId() eine lange zurück? Und erstellt Velocity ein Array von long [] oder Array von Object [] mit den Klammern Notation und/oder tut es versucht, diese Arrays zu ihrem gewünschten Typ zu umwandeln/konvertieren. Btw, ich habe nie versucht, liferay aber ich habe eine lange XP in Velocity –

+0

nach dem API $ category.getCategoryId() gibt eine lange. Wie kann ich überprüfen, ob Velocity eine Reihe von langen [] erstellt oder Object []? –