You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by newbie-gero <ch...@e7tech.com> on 2008/05/21 10:47:42 UTC
could not display java values in velocity vm template
Greetings,
i have just started out velocity and i not able to put the java values on
the vm template.
This is the java file where i have written the codes and to be pass to the
velocity
package com.velocityData.velocityObj;
import java.io.StringWriter;
import java.util.*;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
//import org.apache.velocity.servlet.VelocityServlet;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Properties;
public class velocityTest {
static String vmPath = "";
static String language = "";
public String handleRequest(ArrayList velocityList, ArrayList
notificationList) throws Exception {
vmPath = (String)velocityList.get(0);
language = (String)velocityList.get(1);
Properties p = new Properties();
p.setProperty( "resource.loader", "class" );
p.setProperty( "class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader" );
VelocityEngine ve = new VelocityEngine();
ve.init(p);
System.out.println("Inside the
velocityTest_________________________");
ArrayList list = new ArrayList();
Map map = new HashMap();
//map.put("name", "horse");
//map.put("price", "$100.00");
//list.add(map);
for ( int i=0; i < notificationList.size(); i++) {
map.put("Variable"+i,notificationList.get(i));
}
list.add(map);
Collection c = map.values();
Iterator itr = c.iterator();
while(itr.hasNext())
System.out.println(itr.next());
VelocityContext context = new VelocityContext();
context.put("emailList", list);
Template t = null;
try
{
t = ve.getTemplate( vmPath + language);
}
catch (ResourceNotFoundException e)
{
e.printStackTrace();
}
catch (ParseErrorException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
StringWriter writer = new StringWriter();
t.merge( context, writer );
// System.out.println( writer.toString() );
return writer.toString();
}
}
This is the vm template i create
<HTML>
<HEAD>
<TITLE> Booking Confirmation</TITLE>
</HEAD>
<BODY>
<br/><br/>
#set( $count = 1 )
#foreach ( $email in $emailList)
Transaction No: $email.variable0
<br/>
Date: $email.variable1
<br/>
<br/><br/>
Total purchased: $email.variable2
<br/>
Total amount charged: $email.variable3
<br/>
<br/><br/>
=============================================================================
<br/><br/>
Dear $email.variable4 ,
$email.variable2
<br/>
<br/><br/>
Delivery: $email.variable5
<br/>
<br/><br/>
Your Internet Account number is $email.variable6 <br/><br/>
#set( $count = $count + 1 )
#end
Thank you
</BODY>
</HTML>
I want to replace the $email.variable1, $email.variable2, $email.variable3
and so with the java values. But instead of display the value it display
$email.variable1, $email.variable2 etc on the client browser.
I have upload my file here. I'm using Jboss and dunmping the file into the
server should work instantly
this is the file: http://www.nabble.com/file/p17358754/velocity.war.zip
velocity.war.zip
Please do give me guidance
Thanks
--
View this message in context: http://www.nabble.com/could-not-display-java-values-in-velocity-vm-template-tp17358754p17358754.html
Sent from the Velocity - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org
Re: could not display java values in velocity vm template
Posted by Christopher Schultz <ch...@christopherschultz.net>.
To whom it may concern,
newbie-gero wrote:
> ArrayList list = new ArrayList();
> Map map = new HashMap();
>
> for ( int i=0; i < notificationList.size(); i++) {
> map.put("Variable"+i,notificationList.get(i));
> }
Note: key values start with "Variable" (with a leading capital letter).
> list.add(map);
Ok.
[snip]
> context.put("emailList", list);
Ok.
> #foreach ( $email in $emailList)
> Transaction No: $email.variable0
> <br/>
I think you want:
Transation No: $email.Variable0
Velocity first looks for a method called "getVaraiable0()" on whatever
object "email" is. Since "email" is a map, that method does not exist.
Then, Velocity looks for a method called "get" that takes a String
argument (which Map does), and calls get with the String from the
reference (in this case, "varaiable0"). Note that the lookup is
case-sensitive.
I think you just need to capitalize "Variable0" and you'll be good to go.
-chris