Grzegorz Kossakowski wrote:
Leszek Gawron pisze:
Grzegorz Kossakowski wrote:
Simply removing this instructions is not the best option because there
would be a lot of junk
(namespace declarations) laying in Object Model when, in fact, we
would be out of this namespaces.
Doesn't NamespacesTable take care of that?
It does but it's really not clear that we put object (NamespacesTable) on
ObjectModel and modify it
afterwards. That's why I decided to put it again every time it is modified to
keep everything as
clean as possible.
I saw that you removed this from StartPrefixMapping. I would like to strongly
underline that it's
*not* reliable solution because it does *not* fix all scoping problems but only
the one you have
come with.
With template code following:
<root>
<jx:if test="true">
<jx:set var="foo" value="bar"/>
</jx:if>
<test>${foo}</test>
</root>
Will result as:
<root>
<test>bar</test>
</root>
instead of:
<root>
<test/>
</root>
I may be biased but I would expect exactly the first case. I made a
mistake in previous mail proposing jx:if to be scoped. Please mind that
jx:set always puts a variable in current scope so you are not able to
change variable value:
<jx:set var="foo" value="bar"/>
<jx:if test="true">
<jx:set var="foo" value="bazzz"/>
</jx:if>
<test>${foo}</test>
</root>
should result in <test>bazzz</test> otherwise people will get very
confused. A common user won't find the case much different from:
<jx:set var="foo" value="bar"/>
<jx:set var="foo" value="bazzz"/>
<test>${foo}</test>
which in turn works as expected.
Long time ago we have already discussed about introducing jx:declare
along with jx:set. I cannot recall if any consensus was met.
--
Leszek Gawron http://www.mobilebox.pl/krs.html
CTO at MobileBox Ltd.