将velocity变量转换为java.lang.String

时间:2010-11-02 06:29:51

标签: java variables velocity meta-tags

我在jsp页面中有一个速度变量“topic.url”。这段代码碰巧是由其他人写的,所以我不太确定这个变量究竟来自哪里。无论如何,这个变量给了我一个特定的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 个答案:

答案 0 :(得分:1)

jsp页面内的Velocity变量???那么它不是速度变量。这是一个jsp var。你要么写VTL,要么是JSP。您可以使用VelocityViewTag将VTL嵌入到JSP中,但这是在JSP中使用Velocity变量的唯一方法。这看起来并非如此。

答案 1 :(得分:0)

我认为你不能用这样的语法将速度模板参数传递给函数:

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

答案 2 :(得分:0)

据我所知,你不能在速度模板中编写Java函数。你必须反驳到Velocity宏。否则写一个工厂方法,它应该在Velocity上下文中可用。

答案 3 :(得分:0)

nisha,如果你完全删除d jsp代码&amp;相反发现wht数据/对象类型topic.url是直接在d括号内使用它的方法?我们假设它是一个字符串。如果你使用像{topic.url.substring(index where where starts)}这样的sthg来从d url中提取id呢?

我的意思是例如 &lt; meta name =“email.subject”content =“社区名称:{community.name},主题名称:{topic.name},主题网址:{topic.url.substring(30)}”&gt;

底线,我的意思是在d大括号中使用适当的数据类型特定方法。

答案 4 :(得分:0)

我来这件衣服的时间已经很晚了,但我遇到了类似的问题。我最终意识到速度正在为我的“something.url”寻找“getUrl”方法,而实际的方法名称是“getURL” - 通知大写 - 。在这种情况下,您只需要明确地写“$ {something.getURL()}”而不是前者“$ {something.url}”。

这解决了我。