Stringtemplate compare strings does not work

2020-04-07 12:30发布

Can someone explain why this does not work ?

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

It throws

eval tree parse error :0:0: unexpected end of subtree at org.antlr.stringtemplate.language.ActionEvaluator.ifCondition(ActionEvaluator.java:815) at org.antlr.stringtemplate.language.ConditionalExpr.write(ConditionalExpr.java:99)

2条回答
啃猪蹄的小仙女
2楼-- · 2020-04-07 13:00

ST doesn't allow computation in the templates. That would make it part of the model.

查看更多
一纸荒年 Trace。
3楼-- · 2020-04-07 13:03

You can't compare strings inside stringtemplate, unfortunately, but you can send a result of such a comparison into template as a parameter:

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

It might not be what you're looking for, since every time you need to add a comparison you have to pass an extra parameter, and for loops it's even worse. But this is one workaround that may work for simple cases.

查看更多
登录 后发表回答