Re: Having TemplateException or NumberFormatException
Denis Bredelet <[email protected]> Fri, 12 Sep 2014 17:23:03 +0100
| Newsgroups | gmane.comp.web.freemarker.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Daniel, On 11 Sep 2014, at 00:16, Daniel Dekany wrote: > XML stores string values, not numbers or dates or such (OK, not > exactly since Schema, but still). So you have to tell FreeMarker to > convert that string to a number, if you want to treat it as a number, > or else it's just a string, no mater how it looks. > > <#local level = doc["XPath..../@level"]?number>. > > However, I guess "number(XPath..../@level)" should work too, and the How will it work? >> <#local level = doc["number(XPath..../@level)"]> the result of number() is used as index I think ?number is the correct answer. -- Denis. > resulting arithmetic exception is odd. What number is that, that > BigDecimal can't parse? A NaN maybe? (BTW FreeMarker 2.3.21 RC1 will > show the problematic number in the error message.) > > -- > Thanks, > Daniel Dekany > > > Thursday, September 11, 2014, 12:23:29 AM, ven12344 wrote: > >> Hi, All >> >> Need help with Freemarker local variable comparison with a constant or local >> constant variable, tried both but did not work >> >> *FIRST APPROACH* >> >> I have code like this >> >> <#local level = doc["XPath..../@level"]> >> >> "doc" here is the passed in XML document to freemarker and I am getting the >> level (this is attribute in XML which will give the level of the element >> like 1,2,3...) info using XPath and comparing to a constant local variable >> like this >> >> <#if (symbolLevel > levelTest)><#t> >> >> where >> >> <#local levelTest = 4> >> >> For this bit of code I got this exception >> >> freemarker.template.TemplateException: The only legal comparisons are >> between two numbers, two strings, or two dates. >> Left hand operand is a freemarker.ext.dom.AttributeNodeModel >> Right hand operand is a freemarker.template.SimpleNumber >> >> >> *SECOND APPROACH* >> >> I have code like this >> >> <#local level = doc["number(XPath..../@level)"]> >> >> and I am getting the level info using XPath's *number function* and >> comparing to a constant local variable like this >> >> <#if (symbolLevel > 4)><#t> >> >> For this bit of code I got the same exception as the third approach. >> >> >> *THIRD APPROACH* >> >> I have code like this >> >> <#local level = doc["number(XPath..../@level)"]> >> >> and I am getting the level info using XPath's *number function* and >> comparing to a constant local variable like this >> >> <#if (symbolLevel > levelTest)><#t> >> >> For this bit of code I got this exception >> >> java.lang.NumberFormatException >> at java.math.BigDecimal.<init>(BigDecimal.java:459) >> at java.math.BigDecimal.<init>(BigDecimal.java:728) >> at >> freemarker.core.ArithmeticEngine.toBigDecimal(ArithmeticEngine.java:529) >> at >> freemarker.core.ArithmeticEngine.access$000(ArithmeticEngine.java:68) >> at >> freemarker.core.ArithmeticEngine$BigDecimalEngine.compareNumbers(ArithmeticEngine.java:142) >> at >> freemarker.core.ComparisonExpression.isTrue(ComparisonExpression.java:131) >> at >> freemarker.core.ParentheticalExpression.isTrue(ParentheticalExpression.java:66) >> at freemarker.core.IfBlock.accept(IfBlock.java:80) >> at freemarker.core.Environment.visit(Environment.java:208) >> at freemarker.core.MixedContent.accept(MixedContent.java:92) >> at freemarker.core.Environment.visit(Environment.java:208) >> at >> freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179) >> at freemarker.core.Environment.visit(Environment.java:415) >> at >> freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) >> at freemarker.core.Environment.visit(Environment.java:208) >> at freemarker.core.MixedContent.accept(MixedContent.java:92) >> at freemarker.core.Environment.visit(Environment.java:208) >> at freemarker.core.Environment.visit(Environment.java:297) >> at freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) >> at freemarker.core.Environment.visit(Environment.java:208) >> at freemarker.core.Macro$Context.runMacro(Macro.java:163) >> at freemarker.core.Environment.visit(Environment.java:601) >> at freemarker.core.UnifiedCall.accept(UnifiedCall.java:106) >> at freemarker.core.Environment.visit(Environment.java:208) >> at freemarker.core.MixedContent.accept(MixedContent.java:92) >> at freemarker.core.Environment.visit(Environment.java:208) >> at freemarker.core.Environment.process(Environment.java:188) >> at freemarker.template.Template.process(Template.java:237) ------------------------------------------------------------------------------ Want excitement? Manually upgrade your production database. When you want reliability, choose Perforce Perforce version control. Predictably reliable. http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk