2010-11-16 2 views
4

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

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) в орг .antlr.stringtemplate.language.ConditionalExpr.write (ConditionalExpr.java:99)

ответ

10

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

+2

Это серьезно ошеломило меня, как люди могут найти StringTemplate, достаточно прочитать об этом, чтобы создать образец примера, но не понять его единственную самую важную силу. – I82Much

+5

Трудно сказать, действительно ли это сила или слабость. Легко понять, почему это не так очевидно, хотя у него есть другие шаблоны. И проверить равенство - это не так много «вычислений», плюс есть условные обозначения в шаблоне строки в любом случае. – mvmn

+1

условные обозначения только проверка наличие или отсутствие, нет стоимость. огромная разница в терминах разделения модели. –

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