You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Lauri Piispanen (JIRA)" <de...@velocity.apache.org> on 2008/12/04 11:45:44 UTC
[jira] Updated: (VELOCITY-652) Macros encountered in templates are
placed in global scope if no global library is specified and
velocimacro.permissions.allow.inline.to.replace.global = false
[ https://issues.apache.org/jira/browse/VELOCITY-652?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lauri Piispanen updated VELOCITY-652:
-------------------------------------
Attachment: VelociMacroNamespaceTestCase.zip
A test case exposing the issue. Uncomment line #24:
// settings.setProperty("velocimacro.permissions.allow.inline.to.replace.global","true");
to observe the effect. I've left it commented now so you can add this to your test suite.
> Macros encountered in templates are placed in global scope if no global library is specified and velocimacro.permissions.allow.inline.to.replace.global = false
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: VELOCITY-652
> URL: https://issues.apache.org/jira/browse/VELOCITY-652
> Project: Velocity
> Issue Type: Improvement
> Components: Engine
> Affects Versions: 1.6
> Reporter: Lauri Piispanen
> Priority: Minor
> Attachments: VelociMacroNamespaceTestCase.zip
>
>
> This is a minor issue and more of a documentation/implementation mismatch. With default settings (allow.inline.to.replace.global=false, velocimacro.library not specified etc.) the first time a velocimacro is encountered in a template, it is placed in global scope and thus replaces all inline macros. Explicitly setting "allow.inline.to.replace.global=true" will cure the issue, even though it should have no effect as there are no global macros specified - hence nothing to replace! Albeit this is a configuration documentation issue, the behavior can be quite confusing and should probably be changed to have an empty global library if none is specified.
> Steps to reproduce:
> 1) create new RuntimeInstance and only define the resource loader in properties
> 2) create two templates, named test1.vtl and test2.vtl:
> --- test1.vtl:
> #macro( myMacro )
> Macro A
> #end
> #myMacro()
> --- test2.vtl:
> #macro( myMacro )
> Macro B
> #end
> #myMacro()
> 3) first merge() test1.vm, should return "Macro A" (and it does)
> 4) now merge() test2.vm, should return "Macro B" but returns "Macro A" instead
> 5) create new RuntimeInstance with "velocimacro.permissions.allow.inline.to.replace.global = true"
> 6) retry merging and observe correct behavior
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org