我在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>
答案 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}”。
这解决了我。