O'Reilly logo

Jakarta Commons Cookbook by Timothy M. O'Brien

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

9.9. Invoking Methods in a Template

Problem

You need to invoke methods from a Velocity template.

Solution

Use Velocity to access public methods on an object in the VelocityContext. Bind an object to the VelocityContext and reference methods on these objects in a Velocity template. The following template, available on the classpath at scripting/velocity/results.vm, invokes the average( ), min( ), and max( ) methods on a StatUtil object bound to the reference $stat:

** Aggregate Statistics

Average: $stat.average( $results.scores )%
Lowest: $stat.min( $results.scores )%
Highest: $stat.max( $results.scores )%

** Scores:
#foreach( $student in $results.students )
    #score( $student 50 )
#end

More results are available here:
http://www.test.com/detail?test={results.id}

The StatUtil object, which is bound to $stat, computes basic statistics on integer arrays. This class definition is:

public class StatUtil {
    public int average(int[] array) {
        int sum = 0.0;
        for( int i = 0; i < array.length; i++ ) {
            sum += array[i];
        }
        return( sum / array.length );
    }

    public int min(int[] array) {
        int min = Integer.MAX_VALUE;
        for( int i = 0; i < array.length; i++) {
            if( array[i] < min) { min = array[i]; }
        }
        return( min );
    }

    public int max(int[] array) {
        int max = Integer.MIN_VALUE;
        for( int i = 0; i < array.length; i++) {
            if( array[i] > max) { max = array[i]; }
        }
        return( max );
    }
}

The template shown above is loaded from the classpath, and a StatUtil object is added to the VelocityContext . The VelocityEngine is configured ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required