Stringtemplate сравнить строки не работает - PullRequest
5 голосов
/ 16 ноября 2010

Может кто-нибудь объяснить, почему это не работает?

StringTemplate query = new StringTemplate("hello " +  
                "$if(param==\"val1\")$" +  
                " it works! " +  
                "$endif$ " +  
                "world");  
        query.setAttribute("param", "val1");  
        System.out.println("result: "+query.toString());  

бросает

ошибка анализа дерева eval : 0: 0: неожиданный конец поддерева в org.antlr.stringtemplate.language.ActionEvaluator.ifCondition (ActionEvaluator.java:815) в org.antlr.stringtemplate.language.ConditionalExpr.write (ConditionalExpr.java:99)

Ответы [ 2 ]

12 голосов
/ 16 ноября 2010

ST не разрешает вычисления в шаблонах. Это сделало бы его частью модели.

4 голосов
/ 04 июля 2012

К сожалению, вы не можете сравнивать строки внутри stringtemplate, но вы можете отправить результат такого сравнения в шаблон как параметр:

StringTemplate query = new StringTemplate("hello " +  
                "$if(paramEquals)$" +  
                " it works! " +  
                "$endif$ " +  
                "world");  
        query.setAttribute("paramEquals", param.equals("val1"));  
        System.out.println("result: "+query.toString());

Возможно, это не то, что вы ищете, поскольку каждый раз, когда вам нужно добавить сравнение, вы должны передать дополнительный параметр, а для циклов это еще хуже. Но это один из обходных путей, который может работать для простых случаев.

...