velocity-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: LinkTool.addRequestParams is difficult to use due to varargs/String[] parameter
Date Wed, 27 Jul 2011 20:49:16 GMT
Nathan,

On 7/27/2011 4:40 PM, Nathan Bubna wrote:
> On Wed, Jul 27, 2011 at 11:59 AM, Christopher Schultz
> <chris@christopherschultz.net> wrote:
>> All,
>>
>> I've been trying to switch my templates from using
>> LinkTool.addIgnore()....addAllParameters() to use
>> LinkTool.addRequestParamsExcept(String... allButThese) but I'm having a
>> bit of difficulty with it.
>>
>> If I call addRequestParams() with no argument, things work as expect. On
>> the other hand, this does not work:
>>
>> #set($ignoreList = ['foo'])
>> $link.relative('/bar').addRequestParamsExcept($ignoreList)
>>
>> I get an invalid reference log message and the above "$link..." text is
>> rendered as written instead of evaluating successfully.
>>
>> Without much investigation, I believe the problem is that the ignoreList
>> is a List and it needs to be String[]. Velocity will auto-convert Lists
>> into Object[] if appropriate, but I suspect that the resulting object
>> type is Object[] and not, say, String[].
> 
> i believe you're right.
> 
>> There does not appear to be a way to create a String[] from a Velocity
>> template, so using addRequestParams and the other, similar methods will
>> be very difficult to use with an argument.
> 
> why not just do $link.addRequestParamsExcept('foo', 'bar', 'etc')?

When you've got an array (or list) of items, it's tough to turn it into
a varargs call :) I don't know the list of "ignore" items beforehand, so
I can't hard-code the list into the template. Instead, a calling
template needs to set up some kind of variable that contains that ignore
list.

>> If anyone has any suggestions for how to use these methods with
>> template-supplied data, I'd love to hear them. Otherwise, I'm inclined
>> to either overload or modify these methods to accept an Object[]
>> parameter and throw an exception if the array elements are not String
>> objects.
> 
> i think that would be a good enhancement regardless.  i don't
> particularly like templates and tools being picky about types when
> they don't have to be.

Okay, I'll go ahead and log it.

-chris


Mime
View raw message