You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by bu...@apache.org on 2002/07/08 18:04:18 UTC

DO NOT REPLY [Bug 10557] New: - 1.3 templates incompatible with ones that worked on 1.2

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10557>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10557

1.3 templates incompatible with ones that worked on 1.2

           Summary: 1.3 templates incompatible with ones that worked on 1.2
           Product: Velocity
           Version: 1.3-rc1
          Platform: Other
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Source
        AssignedTo: velocity-dev@jakarta.apache.org
        ReportedBy: arozeluk@compugen.com


First off, Velocity is absolutely excellent! Been using it since the first
release, and have definitely not regretted the decision to use this instead of
JSP/Webmacro/etc.

I downloaded Velocity 1.3, and unfortunately there appears to be a bug in this
release, running code which works just fine on 1.2.

First, I added to the Context a utility class that I use frequently under the
name 'utility', which basically has the following:

  public Object arrayGet( Collection c, int index ) {
    return arrayGet( c.toArray(), index );
  }

  public Object arrayGet( Object[] array, int index ) {
    if ( index >= 0 && index < array.length ) {
      return array[ index ];
    }
    else {
      return null;
    }
  }

(don't ask - it solved a problem for me in the past and it's worked great ever
since)

Next, an example template might have:
#set ( $colour_tablelines = ["#FFFFFF","lightblue"] )
#set ($count = 0)
#foreach($c in $items)
  #set( $currentcol = $count % 2 )
  #set( $backcolour = ${utility.arrayGet( ${colour_tablelines},$currentcol )} )
  <tr bgcolor="$!{backcolour}">
... etc etc
  </tr>
#end

The idea, of course, is to alternate the colours of the lines to make the page
easier to read. Perhaps not an optimal solution, but it worked great with every
release of Velocity <= 1.2.

Unfortunately with 1.3, I get the following in my log instead:
Mon Jul 08 11:45:04 EDT 2002  [error] RHS of #set statement is null. Context
will not be modified. mytemplate.vm [line 250, column 1]

Mon Jul 08 11:45:04 EDT 2002   [warn]
org.apache.velocity.runtime.exception.ReferenceException: reference : template =
mytemplate.vm [line 268,column 18] : ${backcolour} is not a valid reference.

While I'm definitely open to suggestions as to how to make this code a bit
cleaner, the underlying problem is that I have many templates and changing them
all would be a lot of work. I'd prefer if it were possible to maintain
compatibility with previous releases of Velocity. For now, I am noting this
issue and continuing with my testing to see if there are any more incompatibilities.

Thanks for your efforts!

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>