Hi Tyler,

to instantiate new object in Velocity, it is recommended to use a tool 
placed/accessible in the context. This is either done from the servlet, or 
using the ToolboxManager from the VelociityViewServlet. For both of these 
approaches you need the webservice container access/control.

The tool may be any simple public java class, something in the line of:

public MoneyTool
{
  public MoneyTool()
  {
    // a constructor to instantiate the tool
  }
  public MoneyImpl create(String bigDecimal, String unit)
  {
    BigDecimal upperAmount = new BigDecimal(bigDecimal);
    return new MoneyImpl(upperAmount, unit);
  }
}

And then use it in the template:
...
#set( $upperBound = MoneyTool.create("1500.00", "USD") )
#if( $price.lessThan($upperBound) && $price.greaterThan($lowerBound) )
   Hooray!
#end


Alternatively you can use hidden velocity capabilities to instantiate random 
objects, as in:
  http://osdir.com/ml/jakarta.velocity.user/2002-10/msg00220.html
  http://jira.xwiki.org/jira/browse/XWIKI-457
This combined with some macros allows creating readable code.
DISCLAIMER: The velocity authors do not recommend using 
getClass().forName(...).newInstance() in the template, which is against the MVC 
paradigm, and since the servers might have this feature blocked by an 
ueberspector, more here:
  http://wiki.apache.org/velocity/HackingVelocity?highlight=Hacking%20velocity
You should, when possible use tools placed in the context in the servlet side.

Hope this helps,
Christoph


Tyler Kremberg wrote:
> Please ignore my ignorance, I've read through the documentation and haven't
> figured out how to solve my problem.  ; I am a front-end developer coming
> from the PHP world with only some JSP background.  I am working on a system
> that I do not have the source to.  Anyway, I have access to price
> information.
> 
> #set ($productPrice = $product.getPrice($sesShoppingCart.getCurrency()))
> #set ($listPrice = $price.getAmount())
>                               
> I even have access to a Class with comparator methods.
> I need to do something like this: 
>  
> #if( $price.lessThan($upperBound) && $price.greaterThan($lowerBound) )
>    Hooray!
> #end
> 
> In JSP, I could write a scriptlet.
> BigDecimal upperAmount = new BigDecimal("1500.00");
> $upperBound = new MoneyImpl(upperAmount, "USD");
> 
> My question, how can I create the $upperBound and $lowerBound as Money
> objects in the scope of this template.  What is the best way to do this in
> Velocity?  Am I barking up the wrong tree?
> 
> Help is greatly appreciated.  Thanks!
> 
> 
> Tyler
>       
> P.S. For reference, class documentation:
> http://edocs.bea.com/alcs/docs51/javadoc/com/elasticpath/domain/misc/Money.h
> tml#greaterThan(com.elasticpath.domain.misc.Money)
> 
> http://edocs.bea.com/alcs/docs51/javadoc/com/elasticpath/domain/misc/impl/Mo
> neyImpl.html
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to