Я думаю, вы не можете передать параметр шаблона скорости в функцию с таким синтаксисом:
<%= parse({topic.url}) %>
Вы можете попробовать подход ниже. Обратите внимание, что почти наверняка есть гораздо лучший способ выполнить эту работу, используя инструменты, которые предоставляет Velocity. Ниже приведен вид некрасивого взлома, который поможет вам начать работу. Я настоятельно рекомендую переработать этот подход, чтобы лучше использовать возможности Velocity:
public String parseTopicUrl(javax.servlet.http.HttpServletRequest request) throws Exception {
Object topic = request.getAttribute("topic");
if (topic == null) {
System.out.println(">>>null topic");
return null;
}
Class topicClass = topic.getClass();
java.lang.reflect.Method method = topicClass.getMethod("getUrl", null);
Object url = method.invoke(topic, null);
if (url == null) {
System.out.println(">>>'url' is null");
} else {
System.out.println(">>>'url' class is " + url.getClass());
System.out.println(">>>'url' toString is " + url);
}
// TODO: cast 'url' to its real class and work with it
return null;
}
Тогда используйте:
<%= parseTopicUrl(request) %>