Преобразование переменной скорости в java.lang.String - PullRequest
1 голос
/ 02 ноября 2010

У меня есть переменная скорости "topic.url" внутри страницы JSP.Этот код написан другим человеком, поэтому я не совсем уверен, откуда именно эта переменная.В любом случае, эта переменная дает мне определенный URL, который я должен проанализировать и извлечь конкретное поле.Я планирую написать функцию Java для этого.Проблема в том, что когда я передаю эту переменную скорости в функцию, какой тип данных мне следует использовать.Я пытался преобразовать его в строку, но это не работает.Вот фрагмент кода:

<html>
<head>
<%!

public String parse(String url)
{
    url="abc";  
    return(url);
}
%>

    <meta name="email.subject" content="Community name:{community.name},Topic Name:{topic.name},Topic URL:<%= parse({topic.url}) %>">
</head>

Ответы [ 5 ]

1 голос
/ 02 ноября 2010

Переменная Velocity на странице JSP ???Тогда это не переменная скорости.Это JSP Var.Вы пишете VTL или JSP.Вы можете встроить VTL в JSP с VelocityViewTag, но это единственный способ иметь переменную Velocity внутри JSP.И это не похоже на случай.

0 голосов
/ 06 июля 2012

Я прихожу довольно поздно для ответа, но у меня была похожая проблема.В итоге я понял, что скорость ищет метод «getUrl» для моего «some.url», тогда как фактическое имя метода было «getURL» - примечание в верхнем регистре -.В этом случае вам просто нужно явно написать «$ {thing.getURL ()}» вместо прежнего «$ {thing.url}».

Это решило это для меня.

0 голосов
/ 02 ноября 2010

Ниша, а если вы полностью удалили d jsp-код и вместо этого выяснили, какой тип данных / объекта topic.url, и использовали его метод непосредственно внутри фигурных скобок?давайте предположим, что это строка.Что если бы вы использовали sthg как {topic.url.substring (индекс, где начинается идентификатор)}, чтобы извлечь идентификатор из URL-адреса?

я имею в виду, например,

нижняя строка, я имею в виду просто использовать d подходящих для конкретного типа данных методов в пределах d фигурных скобок.

0 голосов
/ 02 ноября 2010

Насколько я знаю, вы не можете писать функции Java внутри шаблона скорости.Вы должны будете вернуться к макросу Velocity.В противном случае напишите фабричный метод, и он должен быть доступен в контексте Velocity.

0 голосов
/ 02 ноября 2010

Я думаю, вы не можете передать параметр шаблона скорости в функцию с таким синтаксисом:

<%= 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) %>
...